uva11752 The Super Powers

思路:当一个数的指数是合数的时候那么这个数就符合题目的要求,所以从2到1<<16,开始暴力枚举他们的指数,是合数的就加入set,因为4是最小的合数,所以到1<<16即可。

 1 #include<stdio.h>
 2 #include<algorithm>
 3 #include<iostream>
 4 #include<string.h>
 5 #include<math.h>
 6 #include<set>
 7 #include<queue>
 8 using namespace std;
 9 typedef unsigned long long LL;
10 bool prime[70];
11 int ans[70];
12  LL ak = (LL)(1<<64)-1;
13 set<LL>val;
14 set<LL>::iterator it;
15 int main(void)
16 {
17     int i,j;
18     int cn = 0;memset(prime,0,sizeof(prime));
19     for(i = 2; i < 64 ; i++)
20     {
21         if(!prime[i])
22         {
23             for(j = i; (i*j) < 64 ; j++)
24             {
25                 prime[i*j] = true;
26             }
27         }
28     }
29     for(i = 2 ; i < (1<<16); i++)
30     {  LL tp = 1;
31        for(j = 1 ; j < 64; j++)
32        {
33            if(ak/tp < i)
34            {
35                break;
36            }
37            else if(prime[j])
38            {
39                tp*=(LL)i;
40                val.insert(tp);
41            }
42            else tp*=(LL)i;
43        }
44     }int er =0 ;printf("1\n");
45     for(it = val.begin(); it!= val.end(); it++)
46     {   er++;
47         printf("%llu\n",*it);
48     }
49     return 0;
50 }

 

posted @ 2016-08-24 21:37  sCjTyC  阅读(118)  评论(0编辑  收藏  举报