求约数的个数
#include<stdio.h>
#define N 10101010
int i,j,p[N],pri[N],vis[N];
void prime()
{
for(i=2;i<=N;i++)
{
if(!vis[i]) pri[++pri[0]]=i;
for(j=1;j<=pri[0]&&i*pri[j]<=N;j++)
{
vis[i*pri[j]]=1;
if(i%pri[j]==0) break;
}
}
}
int main()
{
prime();
int n,v=1,ans=0;
scanf("%d",&n);
for(i=1;i<=pri[0];i++)
{
if(pri[i]>n) break;
if(n%pri[i]==0) ans++;
while(n%pri[i]==0)
{
p[ans]++;
n=n/pri[i];
}
}
for(i=1;i<=ans;i++)
v=v*(p[i]+1);
printf("%d",v);
return 0;
}

浙公网安备 33010602011771号