题意:http://www.lightoj.com/volume_showproblem.php?problem=1028
求数字n有多少个因子数 不包括1
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<queue> #include<map> #include<math.h> #include<string> #include<vector> using namespace std; #define INF 0x3f3f3f3f #define LL long long #define N 1000006 int ans=0,a[N],q[N]; void prime()///素数表 更省时 { for(int i=2;i<N;i++) { if(!a[i]) q[ans++]=i; for(int j=0;j<ans&&q[j]*i<N;j++) { a[q[j]*i]=1; if(i%q[j]==0) break; } } } int oula(LL n) { if(n==0) return 0; int i=0,sum=1; while(n>=q[i]*q[i]&&i<ans) { int s=0; if(n%q[i]==0) { while(n%q[i]==0) { n=n/q[i]; s++; } } i++; sum*=(s+1); } if(n!=1) sum*=2; return sum-1;///不包括1 } int main() { int T,t=1; LL n; prime(); scanf("%d",&T); while(T--) { scanf("%lld",&n); printf("Case %d: %d\n",t++,oula(n)); } return 0; }