Description
有一个整数N,现在你的任务是计算出N!有多少个不同的因子.比如说,3! = 3 * 2 * 1, 那么3!的因子是1,2,3,6,所以3!有4个因子.
Input
数据的第一行是一个整数T.
接下去每行有一个整数N,N的范围是0~10^7.
Output
对每个测试用例输出N!不同的因子个数,由于答案很大,所以只需要输出答案mod 10007的值.
Sample Input
3
2
3
4
Sample Output
2
4
8
#include <stdio.h> #include <math.h> #include <string.h> const int M = 10000000; int prim[700000],S; bool primb[10000001]; void p(); int main(int argc,char *argv[]) { int T,n,s,r,temp,i; p(); scanf("%d",&T); while(T--) { scanf("%d",&n); r = 1; for(i = 0;i < S ;i++) { if(prim[i] > n) break; s = 1; temp = n; while(temp) { temp /= prim[i]; s += temp; if(s > 10007) s %= 10007; } r *= s; if(r > 10007) r %= 10007; } printf("%d\n",r); } return 0; } void p() { int i,j,q,m; S = 0; primb[0] = false; primb[1] = false; primb[2] = true; for(i = 4;i < M;i += 2) primb[i] = false; for(i = 3;i < M;i += 2) primb[i] = true; for(i = 3;i < M;i += 2) { if(primb[i]) { m = M / i; for(j = i;j <= m;j++) { primb[i * j] = false; } } } for(i = 0;i < M;i++) { if(primb[i] == true) { prim[S] = i; S++; } } // printf("%d ",S); }