UVA 10780

题目链接

思路好想,注意细节。错了很多次。

 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:
Impossible to divide
",cas++);
64         else
65         printf("Case %d:
%d
",cas++,minz);
66     }
67     return 0;
68 }

原文地址:https://www.cnblogs.com/naix-x/p/3380915.html