题目链接: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之内筛选出素数和合数,然后素数与合数组合。但是没想到怎么刹车以防超过最大值。

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

只恨当时没想到……

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

代码如下:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <string>
#include <set>
#define ms(a,b) memset((a),(b),sizeof((a)))
using namespace std;
typedef long long LL;
const int INF = 2e9;
const LL LNF = 9e18;
const int mod = 1e9+7;
const int maxn = 1e5+100; int vis[100], p[100], cnt = 0;
typedef unsigned long long ull;
void init()
{
int m = (64+0.5);
for(int i = 2; i<=m; i++)
if(!vis[i])
{
p[++cnt] = i;
for(int j = i*i; j<64; j += i)
vis[j] = 1;
}
} set<ull>s; //用set完成了排序加去重的功能 int main()
{
init(); //标记在64以内的合数
ull maxx = (1LL<<64)-1; //最大值
for(ull i = 2;; i++) //枚举底数
{
ull x = maxx;
int t = 0;
//尽量不要用取对数的方法求得t,因为常常出现浮点数的相关问题
while(x>=i) //计算i的最大次幂
{
t++;
x /= i;
}
if(t<4) break;
x = 1;
for(int j = 1; j<=t; j++)
{
x *= i;
if(vis[j])
s.insert(x);
}
} s.insert(1);
set<ull>::iterator it;
for(it = s.begin(); it!=s.end(); it++)
cout<<*it<<endl;
}

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. TCP server和client的一些测试

    一.TCP server和client测试   socket设置 测试项/测试情景 send recv 测             server block           client bloc ...

  2. How to Create a Provisioning Profile for iPhone

    If you're making iPhone and iPad apps, there are some processes you must work through to go from dev ...

  3. XCode 4.3 Unable to load persistent store UserDictionary.sqlite 以及 ios simulator failed to install the application

    I have been working on an iOS app for some time, all of a sudden I am getting the following crash ev ...

  4. Android重写view时onAttachedToWindow () 和 onDetachedFromWindow ()

    在重写View的时候,会遇到这两个方法 protected void onAttachedToWindow() Description copied from class: View This is ...

  5. 20. Spring Boot Servlet【从零开始学Spring Boot】

    转载:http://blog.csdn.net/linxingliang/article/details/52069482 Web开发使用 Controller 基本上可以完成大部分需求,但是我们还可 ...

  6. C 标准库 - <time.h>

    C 标准库 - <time.h> 简介 time.h 头文件定义了四个变量类型.两个宏和各种操作日期和时间的函数. 库变量 下面是头文件 time.h 中定义的变量类型: 序号 变量 &a ...

  7. python(3)- 循环语句:从最内层跳出多层循环

    跳出多层循环:三层循环,最里层直接跳出3层 方法一: 在Python中,函数运行到return这一句就会停止,因此可以利用这一特性,将功能写成函数,终止多重循环 def work(): #定义函数 f ...

  8. Selenium系列之--07 操作远程浏览器

    Selenium远程控制浏览,可以通过如下两种方式实现,本质上都是Selenium Grid a.  客户机启Selenium Standalone Server 作为远程服务,服务端通过调用Remo ...

  9. 函数式编程( Functional)与命令式编程( Imperative)对比

    1.函数式编程带来的好处 函数式编程近些年异军突起,又重新回到了人们的视线,并得到蓬勃发展.总结起来,无外乎如下好处: 1.减少了可变量(Immutable Variable)的声明,程序更为安全.  ...

  10. Anacoda 介绍、安装、环境切换

    官网下载 概述 很多学习python的初学者甚至学了有一段时间的人接触到anaconda或者其他虚拟环境工具时觉得无从下手, 其主要原因就是不明白这些工具究竟有什么用, 是用来做什么的, 为什么要这么 ...