约数-倍数法

求1~n每个数的正约数集合-倍数法

以d为正约数的数有d,2d,3d,4d....\lfloor n/d \rfloor*d从1到n扫描每个数,将每个数的倍数的正约数集合都加入d。
时间复杂度:O(N+N/2+N/3+..+N/N) = O(N \log N)

vector<int> a[50010];
void get_div(int n){
    for(int i = 1;i<=n;i++){
        for(int j = 1;j<=n/i;j++)
            a[i*j].push_back(i);
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。