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 }

你可能感兴趣的:(time)