题目链接:https://vjudge.net/problem/UVA-11752

题解:

1.首先变量必须用unsig long long定义。

2.可以分析得到,当指数为合数的时候,该值合法。

3.由于最大值为(2^64)-1,而最小的合数为4, 所以底数最大都不超过(2^16)。且指数最大不超过64。

那么就可以:

枚举底数,然后计算出在最大值范围内,可以取到的最大指数。当最大指数小于4时,可以退出循环了。

然后枚举指数,从4开始,当指数为合数时,该值合法。

4.时间复杂度:O((2^16)* 64) < O(1e7)

反思:

现场做的时候,发现了:底数为素数,指数为合数的组合是合法的,且不会出现重复。

也知道底数在1e5之内,但却没有发现指数最大都不超过64(原因没有以 2^64 为分析对象)。

当时的想法是:在1e5之内筛选出素数和合数,然后素数与合数组合。但是没想到怎么刹车以防超过最大值。

原来是:在组合之前,先计算出该素数下最大的指数,然后就以这个最大指数为刹车基准。

只恨当时没想到……

而且:不管底数是否为素数,直接枚举也不会超时。所以才导致想到了复杂的方法,这源于没有事先对复杂度作出准确的估计。

代码如下:

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. #include <vector>
  6. #include <cmath>
  7. #include <queue>
  8. #include <stack>
  9. #include <map>
  10. #include <string>
  11. #include <set>
  12. #define ms(a,b) memset((a),(b),sizeof((a)))
  13. using namespace std;
  14. typedef long long LL;
  15. const int INF = 2e9;
  16. const LL LNF = 9e18;
  17. const int mod = 1e9+7;
  18. const int maxn = 1e5+100;
  19.  
  20. int vis[100], p[100], cnt = 0;
  21. typedef unsigned long long ull;
  22. void init()
  23. {
  24. int m = (64+0.5);
  25. for(int i = 2; i<=m; i++)
  26. if(!vis[i])
  27. {
  28. p[++cnt] = i;
  29. for(int j = i*i; j<64; j += i)
  30. vis[j] = 1;
  31. }
  32. }
  33.  
  34. set<ull>s; //用set完成了排序加去重的功能
  35.  
  36. int main()
  37. {
  38. init(); //标记在64以内的合数
  39. ull maxx = (1LL<<64)-1; //最大值
  40. for(ull i = 2;; i++) //枚举底数
  41. {
  42. ull x = maxx;
  43. int t = 0;
  44. //尽量不要用取对数的方法求得t,因为常常出现浮点数的相关问题
  45. while(x>=i) //计算i的最大次幂
  46. {
  47. t++;
  48. x /= i;
  49. }
  50. if(t<4) break;
  51. x = 1;
  52. for(int j = 1; j<=t; j++)
  53. {
  54. x *= i;
  55. if(vis[j])
  56. s.insert(x);
  57. }
  58. }
  59.  
  60. s.insert(1);
  61. set<ull>::iterator it;
  62. for(it = s.begin(); it!=s.end(); it++)
  63. cout<<*it<<endl;
  64. }

UVA 11752 The Super Powers —— 数学与幂的更多相关文章

  1. UVA 11752 The Super Powers【超级幂】

    题目链接: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=111527#problem/Z 题意: 我们称一个可以由至少两个不同正整数的幂 ...

  2. UVa 11752 - The Super Powers 数学

    请看这个说明http://blog.csdn.net/u014800748/article/details/45914353 #define _CRT_SECURE_NO_WARNINGS #incl ...

  3. uva 11752 The Super Powers 素数+大数判断大小

    题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_proble ...

  4. uva 11752 - The Super Powers

    这个题   任意一个数,他的幂只要不是质数则可以分解成两个数的乘   判断有没有溺出  i×i  则用最大的那个数 Max/i < i 吗 #include<iostream> #i ...

  5. uva 11752 The Super Powers (数论+枚举)

    题意:找出1~2^64-1中 能写成至少两个数的幂形式的数,再按顺序输出 分析:只有幂是合数的数才是符合要求的.而幂不会超过64,预处理出64以内的合数. 因为最小的合数是4,所以枚举的上限是2的16 ...

  6. UVA 11752 The Super Powers(暴力)

    题目:https://cn.vjudge.net/problem/UVA-11752 题解:这里只讨论处理越界的问题. 因为题目最上界是 264-1. 我们又是求次幂的. 所以当我们就可以知道 i 的 ...

  7. The Super Powers UVA 11752 分析分析 求无符号长整形以内的数满足至少可以用两种不同的次方来表示。比如64 = 2^6 = 8^2; 一个数的1次方不算数。

    /** 题目:The Super Powers UVA 11752 链接:https://vjudge.net/contest/154246#problem/Y 题意:求无符号长整形以内的数满足至少可 ...

  8. UVA 10622 - Perfect P-th Powers(数论)

    UVA 10622 - Perfect P-th Powers 题目链接 题意:求n转化为b^p最大的p值 思路:对n分解质因子,然后取全部质因子个数的gcd就是答案,可是这题有个坑啊.就是输入的能够 ...

  9. The Super Powers

    The Super Powers Time Limit: 1000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu [Subm ...

随机推荐

  1. 网络数据嗅探工具HexInject

    网络数据嗅探工具HexInject   网络数据嗅探是渗透测试工作的重要组成部分.通过嗅探,渗透人员可以了解足够多的内容.极端情况下,只要通过嗅探,就可以完成整个任务,如嗅探到支持网络登录的管理员帐号 ...

  2. Java -----transient 和static

    越来越喜欢深究java基础了,讲讲 transient  和static 对序列化的影响.废话少说,直接上代码就可以了 package serializable; import java.io.Ser ...

  3. java多线程03-----------------volatile内存语义

    java多线程02-----------------volatile内存语义 volatile关键字是java虚拟机提供的最轻量级额的同步机制.由于volatile关键字与java内存模型相关,因此, ...

  4. Android ANR原理分析

    一.概述 ANR(Application Not responding),是指应用程序未响应,Android系统对于一些事件需要在一定的时间范围内完成,如果超过预定时间能未能得到有效响应或者响应时间过 ...

  5. 【Navicat preminm】64位的Navicat preminm注册

    百度云盘 技术-->Navicat preminm+破解

  6. windows10系统下安装nginx的安装步骤

    打开nginx的官网:http://nginx.org/,下载最新的稳定版本.   下载完成后,解压到你想要解压的文件路径中,我解压到了D盘中,并把文件名改为nginx:进入文件内,打开nginx.e ...

  7. python中 urllib, urllib2, httplib, httplib2 几个库的区别

    转载 摘要: 只用 python3, 只用 urllib 若只使用python3.X, 下面可以不看了, 记住有个urllib的库就行了 python2.X 有这些库名可用: urllib, urll ...

  8. standford情感分析代码开源地址

    http://nlp.stanford.edu/sentiment/code.html

  9. Error building Player: Win32Exception: ApplicationName=&#39;E:/adt-20140702/sdk\tools\zipalign.exe&#39;, Com

    1.原因 更新sdk后报错..由于版本号不同,zipalign.exe所处路径不同 2.解决的方法 在sdk路径下搜索zipalign.exe .然后拷贝到报错内容中制定的路径即可了.

  10. Irrlicht 3D Engine 笔记系列之 教程4 - Movement

    作者: i_dovelemon 日期: 2014 / 12 / 16 来源: CSDN 主题: Event Receiver, Animator, Framerate independent move ...