UVA11752 The Super Powers

深藏阁楼爱情的钟 2022-09-20 12:44 127阅读 0赞

最近几天的状态着实不好,数电设计的答辩不能更逗,万幸是终于到家了,看到群里有各种群赛十分开心,希望能找回刷题的动力,调整下状态。

这道题是很久前做的,细节记不太清了。。。

数据范围1到 2^64 -1,可以看出需要用 unsigned long long ,其中1单独考虑,仔细分析可知满足条件的数必然是一个数的合数次方,最小是4,一个数的4次方在2^64 -1之内,那最大只能到65535。暴力枚举然后去除重复的就行了。可以用limit=ceil( 64/(log(i)/log(2)) )-1来判断一个数乘方数的上界。

去重我用的是STL的set,用数组排序再用unique函数也行。

  1. #include <cstdio>
  2. #include <cmath>
  3. #include <algorithm>
  4. #include <set>
  5. using namespace std;
  6. #define i64u unsigned long long
  7. int heshu[50]={4,6,8,9,10,12,14,15,16,18,20,21,22,24,25,26,27,28
  8. ,30,32,33,34,35,36,38,39,40,42,44,45,46,48,49,50,51,52,54,55,56,57,58,60,62,63,64};
  9. i64u POW (i64u s,i64u index)
  10. {
  11. i64u ans=1;
  12. while (index>=1)
  13. {
  14. if ((index&1)==1) //奇数
  15. ans=(ans*s);
  16. index>>=1;
  17. s=s*s;
  18. }
  19. return ans;
  20. }
  21. set<i64u> s;
  22. int main ()
  23. {
  24. int id=0,i;
  25. printf("1\n");
  26. for (i=2;i<65536;i++)
  27. {
  28. int limit;
  29. if (i==2) limit=63;
  30. else limit=ceil( 64/(log(i)/log(2)) )-1;
  31. if (limit <4) break;
  32. for (int j=0;heshu[j]<=limit;j++)
  33. s.insert(POW(i,heshu[j]) );
  34. }
  35. set<i64u>::iterator it;
  36. for (it=s.begin();it!=s.end();it++)
  37. printf("%llu\n",*it);
  38. return 0;
  39. }

发表评论

表情:
评论列表 (有 0 条评论,127人围观)

还没有评论,来说两句吧...

相关阅读

    相关 UVA11752 The Super Powers

    最近几天的状态着实不好,数电设计的答辩不能更逗,万幸是终于到家了,看到群里有各种群赛十分开心,希望能找回刷题的动力,调整下状态。 这道题是很久前做的,细节记不太清了。。。

    相关 uva 10515——Powers Et Al.

    题意:这个题目题中的图片已经给的够清楚了,就算不怎么读题,也能yy大概的意思,况且题目也很短,很容易都出来就是给定 a,b,然后求a^b的个位数! 思路:开始想到了同

    相关 uva 10622——Perfect P-th Powers

    题意:给定一个数n,求最大的一个数k使得n=x^k。 思路1:正规的做法是把这个素数分解,然后求指数的最大公约数就是所求(听说有人取了最小值也能过,数据水吧!),素数

    相关 UVA 12298 Super Poker II(FFT)

    题意: 每个花色恰好选择一张牌 能够构成点数和大小为N的方案数 用类似生成函数的想法,多项式的幂值表示大小,前面的系数表示的是方案数 因此想到了多项式乘法,用F