//质因数分解
int factorize(int x,int p[])
{
int cnt=0;
for(int i=2;i*i<=x;i++)
{
while(x%i==0)
{
p[++cnt]=i;
x/=i;
}
}
if(x!=1)p[++cnt]=x;
return cnt;
}
//求因数个数
int d[105]={0},n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
for(int j=1;i*j<=n;j++)
d[i*j]++;
for(i=1;i<=10;i++)
printf("d[%d]=%d\n",i,d[i]);
以luogu3383为例
1、线性筛素数
#include <iostream>
#include <algorithm>
#define maxn 10000010
using namespace std;
int vis[maxn],prime[maxn],n,m;
long long temp;
void lxs()
{
int cnt=0;
for(int i=2;i<=n;i++)
{
if(!vis[i])prime[++