UVA136 求第1500个丑数
枚举大范围数据。。暴力检查题目条件
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
vector<int> Prime;
typedef long long ll;
bool isPrime(ll x){
ll i;
if(x==) return false;
for(i=;i*i<=x;++i){
if(x%i==) return false;
}
return true;
}
vector<int> Set;
map<int,int> mp;
int pri[]={,,,,,,};
bool jud(ll x){
ll temp=x;
while(temp!=&&temp%==){
temp/=;
}
while(temp!=&&temp%==){
temp/=;
}
while(temp!=&&temp%==){
temp/=;
}
if(temp!=){
if(isPrime(temp)){
// printf("T %d temp%d\n",Set[i],temp);
return false;
}
else{
if(temp==) return true;
for(ll j=;j*j<=temp;++j){
if(temp%j==){
// if(temp<100)
// printf("temp%I64d j%I64d\n",temp,j);
if(isPrime(j)) return false;
}
}
return true;
}
}
return true;
}
int main(){
int i,j;
Set.push_back();
for(i=;i<;++i){
if(jud(i)){
Set.push_back(i);
}
}
sort(Set.begin(),Set.end());
for(i=;i<;++i){
printf("%d ",Set[i]);
}
printf("\n");
printf("The 1500'th ugly number is %d",);
return ;
}
事实证明正确答案8e9。。。而这个枚举1e7就要跑非常久。。
gg
事实上还没法证明检验条件是否正确
然后我们发现。。丑数可以由已有的丑数再加上丑数*2,3,5所新生成的丑数。。
但是如果你暴力乘法直接map记录出没出现过的数字。。没出现的话直接push
然后我们发现这样。。会漏掉中间的一些数字。。
但是下一轮操作我发现前面的一组数据
1 2 3 4 5 6 8 9 10 15 25再下一轮会加上12
年轻地认为只要取得足够靠后就能补全。。
事实上。。我后来花了大力气去逼近long long 的最大值来逼近。。
答案还是错的。。
那么我们可以理解为。。还有没补上的数字(如果答案输出格式没有问题的话)
那么怎么做比较稳妥呢?
对于第一个数特殊情况我们在集合S push 1
2,3,5乘一遍
2,3,5
取最小的没有出现过的push2
序列变成了1,2
2,3,5乘法一遍
2:2,4
3: 3,6
5: 5,10
我们在这六个数里取最小的。。
重复以上的步骤。。
最后我们得到的序列就是最小的。。
以后碰到中间缺项的时候。。我们可以用每次只取最小的1个!来完成取出完整的连续序列
其实我本来也是这么想的。。
但是我的写法和想法不是一致的。。这个在以后一定要多检查。。你的语句是否在做你期望的事情
下面贴上代码。。
ps q巨今天说对于PE返回WA。。热身赛测一下空格和回车就好了
对于64位整数。。有的评测机不支持%I64d的话。。可能会返回64个空格
但是现在大部分的评测机应该都支持%lld..
比赛的时候最好测试一下。。。
#include <iostream>
#include <cstdio>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
typedef long long ll;
vector<ll> S;
map<ll,ll> mp;
int p[]={,,};
int n;
int main(){
scanf("%d",&n);
S.push_back();
int i,j,flag=;
while(S.size()<n&&!flag){
int sz=S.size();
vector<ll> k;
for(i=;i<sz&&!flag;++i){
ll t=S[i];
for(j=;j<;++j){
if(mp[p[j]*t]==){
k.push_back(p[j]*t);
}
}
}
sort(k.begin(),k.end());
S.push_back(k[]);
mp[k[]]++;
}
sort(S.begin(),S.end());
printf("The 1500'th ugly number is 859963392.");
return ;
}
最后的输出是算好的1500th结果。。输入是丑数的规模。。
一开始做这个题还有一个错误的想法。。
我算的答案是用2,3,5,6,20,15,30作为基数去乘以不是质数的数来得到答案。。
但是。。不是质数的数仍然可能含有除了2,3,5以外的质因子
所以我们要把这种数排除掉。。于是就有了大暴力检验的模拟。。
8e9。。跑死你个智障。。。
UVA136 求第1500个丑数的更多相关文章
- 求第n个丑数
参考http://www.cppblog.com/zenliang/articles/131094.html 什么是因子:因子*因子=乘积数如果一个数是丑数,那么这个数是2,3,5的乘积的结果.比如: ...
- 算法习题---5.7丑数(Uva136)
一:题目 丑数是指不能被除了2,,5以外的素数整除的数.将丑数从小到大排序 ,,,,,,,,,,,.... 求第1500个丑数 (一)求解方法 对于任意丑数x,他的2x,3x,5x都是丑数. 二:代码 ...
- 剑指Offer面试题:29.丑数
一.题目:丑数 题目:我们把只包含因子2.3和5的数称作丑数(Ugly Number).求按从小到大的顺序的第1500个丑数.例如6.8都是丑数,但14不是,因为它包含因子7.习惯上我们把1当做第一个 ...
- 【转载】丑数humble numbers
转载地址:http://blog.csdn.net/qwerty_xk/article/details/12749961 题:只有2 3 5 这三个因子的数,求第1500个 设1为第一个丑数,求第 ...
- 37.寻找丑数[Ugly numbers]
[题目] 我们把只包含质因子2.3和5的数称作丑数(Ugly Number),例如:2,3,4,5,6,8,9,10,12,15,等,习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第1500个丑 ...
- 剑指OFFER之丑数(九度OJ1214)
题目描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7.习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 输入: 输 ...
- 基于visual Studio2013解决面试题之0701寻找丑数
题目
- 《剑指offer》第四十九题(丑数)
// 面试题49:丑数 // 题目:我们把只包含因子2.3和5的数称作丑数(Ugly Number).求按从小到 // 大的顺序的第1500个丑数.例如6.8都是丑数,但14不是,因为它包含因子7. ...
- 【IT笔试面试题整理】丑数
[试题描述]我们把只包含因子2.3和5的数称作丑数.求按从到大的顺序的第1500个丑数.例如6,8是丑数,而14不是,因为它包含因子7.习惯上把1当作第一个丑数. 根据丑数的定义,丑数应该是另一个丑数 ...
随机推荐
- Linux释放内存空间
Linux服务器运行一段时间后,由于其内存管理机制,会将暂时不用的内存转为buff/cache,这样在程序使用到这一部分数据时,能够很快的取出,从而提高系统的运行效率,所以这也正是linux内存管理中 ...
- Effective C++ -----条款33:避免遮掩继承而来的名称
derived classes内的名称会遮掩base classes内的名称.在public继承下从来没有人希望如此. 为了让被遮掩的名称再见天日,可使用using声明式或转交函数(forwardin ...
- code vs1706 求合数和(数论 素数的判定)
1706 求合数和 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题解 查看运行结果 题目描述 Description 用户输入一个数,然后输出 ...
- 【python】classmethod & staticmethod 区别
来源:http://blog.csdn.net/carolzhang8406/article/details/6856817 其他参考: http://blog.csdn.net/lovingprin ...
- iOS MRC ARC 内存管理
转自:http://www.jianshu.com/p/48665652e4e4 1. 什么是内存管理 程序在运行的过程中通常通过以下行为,来增加程序的的内存占用 创建一个OC对象 定义一个变量 调用 ...
- August 10th, 2016, Week 33rd, Wednesday
The degree of loving is measured by the degree of giving. 爱的深浅是用给与的多少来衡量的. Some say that if you love ...
- clustershell
.安装 yum install clustershell .配置ssh无密码登录 .配置/etc/hosts 在hosts中文件中将ip和主机名对应起来,使用比较方便 .配置关键文件 clusters ...
- 股票交易(洛谷U6084)
题目背景 kkk最近迷上了炒股. 题目描述 kkk炒了N天股,第i天的股价为a[i]元.kkk希望股票每天都上涨1元钱,但是操盘手lzn并不想让kkk赚很多钱导致他亏本,于是a[i]相对a[i-1]就 ...
- 比较 http连接 vs socket连接
http连接 :短连接,客户端,服务器三次握手建立连接,服务器响应返回信息,连接关闭,一次性的socket连接:长连接,客户端,服务器三次握手建立连接不中断(通过ip地址端口号定位进程)及时通讯,客户 ...
- 【SSO单点系列】(1):CAS4.0 环境的搭建
一.概述 今天开始写CAS相关的第一篇文章,这篇文章主要是关于CAS环境的搭配,提供给刚刚接触CAS的一个入门指南,并演示一个CAS的最简单的实例 二.环境要求 博主的环境如下: win8.1 64 ...