题目地址:http://ac.jobdu.com/problem.php?cid=1040&pid=55
//九度OJ 教程56 约数的个数(感谢炮神的约数公式)//http://ac.jobdu.com/problem.php?cid=1040&pid=55//leizh007大神的约数公式,借鉴写的代码,感谢炮神#include <stdio.h>#define MAXS 100004int mark[MAXS]={0},count=0;long prime[MAXS];int main(){ long i,j,k,n,ans,a; for(i=2;i<MAXS;i++) { if(mark[i])continue; prime[++count]=i; for(j=i*i;j<MAXS;j+=i)mark[j]=1; } while(~scanf("%ld",&n)) { for(i=1;i<=n;i++)//纯粹为了读n次数,没实际用处。 { ans=1; scanf("%ld",&a); for(j=1;j<count;j++) { k=1; while(a%prime[j]==0) { k++; a/=prime[j]; } ans*=k;//牛的必然牛,排列吧组合吧! if(a==1)break; } if(a!=1)ans*=2;//牛的必然牛,防止另一个素数的出现。 printf("%ld\n",ans); } } return 0;}