题意RT
就是要注意加了注释的那里- -!
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<iostream> 5 #include<cmath> 6 #include<map> 7 #include<queue> 8 9 using namespace std; 10 11 typedef long long ll; 12 13 const int x = 1000000000; 14 bool ispri[32000]; 15 int pri[3410]; 16 int c; 17 18 void init() 19 { 20 memset(ispri,0,sizeof(ispri)); 21 c = 0; 22 int m = (int)(sqrt(x+0.5)+0.5); 23 for(int i=2;i<=m;i++) 24 { 25 if(!ispri[i]) 26 { 27 pri[c++] = i; 28 for(int j=i*2;j<=m;j+=i) 29 { 30 ispri[j] = true; 31 } 32 } 33 } 34 } 35 36 void solve(int num) 37 { 38 int ans = 1; 39 for(int i=0;i<c;i++) 40 { 41 if(pri[i]<=num && num%pri[i]==0) 42 { 43 int cnt = 0; 44 while(num>0 && num%pri[i]==0) 45 { 46 cnt++; 47 num/=pri[i]; 48 } 49 ans*=(1+cnt); 50 } 51 } 52 //如果是大于打的素数表的最大值int(sqrt(x+0.5)+0.5)且小于x的素数 53 if(num!=1) ans*=2; //!!! 54 printf("%d\n",ans); 55 } 56 57 int main() 58 { 59 int n,num; 60 init(); 61 while(~scanf("%d",&n)) 62 { 63 for(int i=0;i<n;i++) 64 { 65 scanf("%d",&num); 66 solve(num); 67 } 68 } 69 return 0; 70 }
时间: 2024-10-10 08:39:30