枚举大范围数据。。暴力检查题目条件

#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个丑数的更多相关文章

  1. 求第n个丑数

    参考http://www.cppblog.com/zenliang/articles/131094.html 什么是因子:因子*因子=乘积数如果一个数是丑数,那么这个数是2,3,5的乘积的结果.比如: ...

  2. 算法习题---5.7丑数(Uva136)

    一:题目 丑数是指不能被除了2,,5以外的素数整除的数.将丑数从小到大排序 ,,,,,,,,,,,.... 求第1500个丑数 (一)求解方法 对于任意丑数x,他的2x,3x,5x都是丑数. 二:代码 ...

  3. 剑指Offer面试题:29.丑数

    一.题目:丑数 题目:我们把只包含因子2.3和5的数称作丑数(Ugly Number).求按从小到大的顺序的第1500个丑数.例如6.8都是丑数,但14不是,因为它包含因子7.习惯上我们把1当做第一个 ...

  4. 【转载】丑数humble numbers

    转载地址:http://blog.csdn.net/qwerty_xk/article/details/12749961 题:只有2 3 5 这三个因子的数,求第1500个   设1为第一个丑数,求第 ...

  5. 37.寻找丑数[Ugly numbers]

    [题目] 我们把只包含质因子2.3和5的数称作丑数(Ugly Number),例如:2,3,4,5,6,8,9,10,12,15,等,习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第1500个丑 ...

  6. 剑指OFFER之丑数(九度OJ1214)

    题目描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7.习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 输入: 输 ...

  7. 基于visual Studio2013解决面试题之0701寻找丑数

     题目

  8. 《剑指offer》第四十九题(丑数)

    // 面试题49:丑数 // 题目:我们把只包含因子2.3和5的数称作丑数(Ugly Number).求按从小到 // 大的顺序的第1500个丑数.例如6.8都是丑数,但14不是,因为它包含因子7. ...

  9. 【IT笔试面试题整理】丑数

    [试题描述]我们把只包含因子2.3和5的数称作丑数.求按从到大的顺序的第1500个丑数.例如6,8是丑数,而14不是,因为它包含因子7.习惯上把1当作第一个丑数. 根据丑数的定义,丑数应该是另一个丑数 ...

随机推荐

  1. 禁用visual studio实时调试器

    最近每次开机时都会出来一个visual Studio实时调试器,报“发生了未处理的异常(‘System ComponentModel.Win32Exception’,发生位置是 BSSocketSms ...

  2. SAP打印出库单 新需求

    *&---------------------------------------------------------------------* *& Report  Z_SD_CKD ...

  3. supersr--控制器的生命周期:

    调用顺序为 1 init函数(init;initWithFrame;initWithCoder;等)--初始化 2 awakeFromNib--在loadView之前的工作放在这里 3 viewDid ...

  4. [Android Pro] 小心ReleaseByteArrayElements 中的参数问题

    referen to : http://blog.csdn.net/rainlight/article/details/818964 在Sun的官方文档中,关于该函数的用法如下 The array i ...

  5. .net 获取https页面的信息 在iis7.5服务器上不管用

    让我纠结了一天多的问题,给大家看下,有相同情况的可以不用浪费时间了,本人当时找了好半天都没找到什么有用的信息,项目在本地没有问题,但部署在服务器后,获取不到https页面的信息,加入下面的代码就可以了 ...

  6. printf 打印 unit32_t

    今天在网上找了老半天终于找到了:printf 打印 uint32_t 类型  uint32_t domainId; printf("\ndomainId=========%lu", ...

  7. Swift - 懒加载(lazy initialization)

    Swift中是存在和OC一样的懒加载机制的,在程序设计中,我们经常会使用 懒加载 ,顾名思义,就是用到的时候再开辟空间 懒加载 格式: lazy var 变量: 类型 = { 创建变量代码 }() 懒 ...

  8. PHP中 字符串 常用函数

    //strpos    查找字符串中是否含有字符 $str='abcde'; $char='a':   if(strpos($str,$char) !==false){    echo '含有',$c ...

  9. 阿里云 SWAP

    https://yq.aliyun.com/articles/52098 https://www.kejianet.cn/aliyun-swap/

  10. 【转载】Pyqt 添加右键菜单方法

    转载地址: http://www.cnblogs.com/yogalau/p/3954042.html?utm_source=tuicool QListWidget 是继承 QWidget 的, 所以 ...