uva11752(合数)
2015-08-11 20:22
281 查看
题意:
如果一个数可以表示成两个或以上的数的幂,就是超级幂;
例如64 = 8^2 = 4^3;
求1到2^64-1所有的的超级幂;题目没有输入;
思路:
所有数的合数(不是素数就是合数)次幂,都是超级幂;
所以求所有每个数的合数次幂;
要注意溢出的边界,和判重;
如果一个数可以表示成两个或以上的数的幂,就是超级幂;
例如64 = 8^2 = 4^3;
求1到2^64-1所有的的超级幂;题目没有输入;
思路:
所有数的合数(不是素数就是合数)次幂,都是超级幂;
所以求所有每个数的合数次幂;
要注意溢出的边界,和判重;
#include <cstdio> #include <cstring> #include <cmath> #include <set> using namespace std; #define MAX 65 typedef unsigned long long ll; bool prime[MAX]; set<ll> myset; ll power(int a, int n) { if(n == 0) return 1LL; ll ans = power(a, n/2); ans *= ans; if(n%2 == 1) ans *= a; return ans; } void init() { memset(prime, false, sizeof(prime)); for(int i = 2; i < MAX; ++i) if(!prime[i]) { for(int j = 2*i; j < MAX; j += i) prime[j] = true; } } int main(){ init(); myset.clear(); myset.insert(1); double lnmax = log( pow(2.0, 64.0)-1 ); for(int i = 2; i < (1<<16); ++i) { int maxe = (int)ceil(lnmax/log(i)); for(int j = 4; j < maxe; ++j) if( prime[j] ) { ll temp = power(i, j); if(!myset.count(temp)) myset.insert(temp); } } for(set<ll>::iterator it = myset.begin(); it != myset.end(); ++it) printf("%llu\n", *it); return 0; }
相关文章推荐
- 8月11日----数据库、serverlet
- Linux管道命令(pipe)之选取命令grep
- 29-HTML-17-HTML(服务端和客户端校验的问题)
- 29-HTML-18-HTML(常见的其他标签)
- 矩形嵌套问题
- 第十五章 外中断
- Blue Jeans(POJ--3080
- 29-HTML-16-HTML(服务端GET和POST区别)
- 开放GIS标准OGC之路(3)之 WFS初探
- spring属性的注入实例
- 【KMP】hdu1867(A + B for you again) 杭电java a题真坑
- 7种寻址方式
- Constructing Roads
- O2O疯狂烧钱路:止血还是放血好
- 29-HTML-15-HTML(GET和POST区别)
- 丑数——剑指offer面试题34
- (算法)Partition方法求数组第k大的数
- leetcode 日经贴,python code -Different Ways to Add Parentheses
- 2015 Multi-University Training Contest 6 (hdu 5357 - Easy Sequence)栈的应用
- 《Python基础教程(第2版)》学习笔记(三):