筛法求约数个数
文章目录
- 问题
- 解释
- 模版
问题
这个方法是用来解决求 1 1 1到 n n n没个数的约数
解释
模版
int m[N],n[N],cnt=0;
int a[N];//a[i]记录i最小质因子的次数
int d[N];//d[i]记录i的约数个数
void get_d(int x)//筛法求约数个数
{ d[1]=1;for(int i=2;i<=x;i++){if(!m[i]){n[++cnt]=i;a[i]=1,d[i]=2;}for(int j=1;i*n[j]<=x;j++){int p=i*n[j];m[p]=1;if(i%n[j]==0){a[p]=a[i]+1;d[p]=d[i]/a[p]*(a[p]+1);break;}elsea[p]=1,d[p]=d[i]*2;}}
}