UVA 10780 - Again Prime? No Time.
思路好想,注意细节。错了很多次。
1 #include <cstdio> 2 #include <cstring> 3 #include <string> 4 #include <cmath> 5 #include <ctime> 6 #include <cstdlib> 7 #include <iostream> 8 using namespace std; 9 #define MOD 1000000 10 int prim[5001]; 11 int o[5001]; 12 int flag[5001]; 13 int aim[5001]; 14 int main() 15 { 16 int t,n,m,i,j,num = 0,minz,temp,cas = 1; 17 for(i = 2;i <= 5000;i ++) 18 { 19 if(!o[i]) 20 { 21 prim[num++] = i; 22 for(j = i+i;j <= 5000;j += i) 23 { 24 o[j] = 1; 25 } 26 } 27 } 28 scanf("%d",&t); 29 while(t--) 30 { 31 scanf("%d%d",&m,&n); 32 int tm = m; 33 memset(flag,0,sizeof(flag)); 34 memset(aim,0,sizeof(aim)); 35 for(i = 2;i <= n;i ++) 36 { 37 temp = i; 38 for(j = 0;j < num;j ++) 39 { 40 if(temp == 1) break; 41 while(temp%prim[j] == 0) 42 { 43 flag[j] ++; 44 temp /= prim[j]; 45 } 46 } 47 } 48 minz = 1000000; 49 for(j = 0;j < num;j ++) 50 { 51 while(m%prim[j] == 0) 52 { 53 aim[j] ++; 54 m /= prim[j]; 55 } 56 } 57 for(j = 0;j < num;j ++) 58 { 59 if(tm%prim[j] == 0) 60 minz = min(flag[j]/aim[j],minz); 61 } 62 if(minz == 0) 63 printf("Case %d:\nImpossible to divide\n",cas++); 64 else 65 printf("Case %d:\n%d\n",cas++,minz); 66 } 67 return 0; 68 }