The Super Powers UVA - 11752(合数幂)】的更多相关文章

/** 题目:The Super Powers UVA 11752 链接:https://vjudge.net/contest/154246#problem/Y 题意:求无符号长整形以内的数满足至少可以用两种不同的次方来表示.比如64 = 2^6 = 8^2: 一个数的1次方不算数. 思路: 分析过程如下: 1 = 1^1 1^2 1^3 16 = 2^4 4^2 64 = 2^6 8^2 81 = 3^4 9^2 256 = 2^8 16^2 512 = 2^9 8^3 设Max为最大的可能获…
题意: 求1~2^64-1之间所有的 至少是两个不同的正整数的幂的数  升序输出 一个数的合数次幂即为这样的数 找出1~2^64-1中所有数的合数次幂 用set存起来(既能防止重复 又能升序) 最后输出就好了 #include <iostream> #include <cstdio> #include <sstream> #include <cstring> #include <map> #include <set> #include…
题目大意:将范围从1~pow(2,64)-1内的super power输出.super power的定义:一个数x至少存在两种x=pow(i,k),(k!=1). 题解: 注意数据范围2的64次方-1,而long long 的范围是2的63次方-1,所以要用unsigned long long. 一个数x至少存在两种幂形式,说明这个幂可以拆开,即这个幂不是质数. 最小非质数(1除外)是4,所以我们只需要枚举2的16次方-1就可以了. 指数只需要枚举1~64就可以了.如果指数非质数,就放到集合中.…
首先有个关键性的结论就是一个数的合数幂就是超级幂. 最小的合数是4,所以枚举底数的上限是pow(2^64, 1/4) = 2^16 = 65536 对于底数base,指数的上限就是ceil(64*log(2)/log(base)),注意这个上限不能取到,是个开区间 #include <cstdio> #include <cmath> #include <set> #include <cassert> using namespace std; typedef…
题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2852 题意:找到在[1,2^64-1]区间范围内的所有Super Powers数,Super Powers数指的是可以写成另外两个正数的次幂: 例如:1=1^1,1=1^20;   64=8^2,64=4^4; 思路:1另外算,从2开始,他的指数如果不是素数,由于算数基本定理,…
The Super Powers Time Limit: 1000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu [Submit]   [Go Back]   [Status] Description   A The Super Powers   We all know the Super Powers of this world and how they manage to get advantages in politica…
/* UVA11752 The Super Powers https://vjudge.net/contest/153365#problem/Y 数论 注意a^n=b要用除法求,并且求得的n比实际大1 */ #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> #include <vector> #include <queue> #incl…
题目链接: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…
题目链接: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=111527#problem/Z 题意: 我们称一个可以由至少两个不同正整数的幂的形式表示的数为超级幂.让你找出1到264−1之间的所有超级幂. 分析: 首先ax∗y=axy,也就是说超级幂必须存在一个为合数的指数. 底数最小为2,此时指数最大为64. 指数最小为4,此时底数最小为216. 暴力枚举一发即可. 因为ull的最大值为264−1,所以乘的过程中注意判断是否大于边界.…
题意:找出1~2^64-1中 能写成至少两个数的幂形式的数,再按顺序输出 分析:只有幂是合数的数才是符合要求的.而幂不会超过64,预处理出64以内的合数. 因为最小的合数是4,所以枚举的上限是2的16次方.对其中的每个数以4为幂的枚举下限,并根据合数表递增.而递增的上界是一个数所能达到的最大幂次.可以根据公式:x = logi(2^64-1) = log(2^64-1) / log(i) 得到. #include<bits/stdc++.h> using namespace std; ; ty…