当前位置: 首页 > article >正文

18005 它不是丑数

题型: 编程题   语言: G++;GCC

Description

“丑数”是指除了质因子2,3,5,不含其它质因子的正整数,例如由小到大前10个“丑数”为
1, 2, 3, 4, 5, 6, 8, 9, 10, 12, ...
非“丑数”的前10个数为
7, 11, 13, 14, 17, 19, 21, 22, 23, 26, ...
现要求编写一个程序,输出指定第几位的非“丑数”。


 

输入格式

第一行为正整数T(T<=10000), 表示case的数目。
此后T行,每行一个正整数 n (n <= 100000000).
 

输出格式

每一个n,输出第n个非“丑数”
 

输入样例

3
1
2
9
 

输出样例

7
11
23

 题意:

求第n个非丑数

分析:

暴力求解,我们只要求出是丑数的数,那么非丑数就是在丑数和丑数之间了。

吐槽一下,学校oj开1e8+5明明就够了,就是不让过,搞得我搞了半个多小时在找bug

没想到居然得开再大点才过得了,服了

//我用的是紫书上优先队列的方法写的,详细解释可以看我的博客紫书上的丑数,里面有详解
#include <iostream>
#include <vector>
#include <queue>
#include <set>
#include <algorithm> 
using namespace std;
typedef long long ll;
const int N=200000005;
ll a[N];
int nums[3]={2,3,5};
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
    int t,cnt=0;
    cin>>t;
    priority_queue<ll,vector<ll>,greater<ll> >q;
    set<ll>s;
    ll tmp=1,m=1;
    q.push(1);
    s.insert(1);
    while(cnt<=100000000){
    	tmp=m;
    	m=q.top();
    	q.pop();
    	for(ll i=tmp+1;i<m;++i){
    		a[++cnt]=i;
    		//cout<<a[cnt]<<endl;
		}
		for(int i=0;i<3;++i){
			ll x=nums[i]*m;
			if(!s.count(x)){
				s.insert(x);
				q.push(x);
			}
		}
	}
	
    while(t--){
    	int n;
    	cin>>n;
    	cout<<a[n]<<endl;
	}
    return 0;
}


http://www.kler.cn/a/4793.html

相关文章:

  • Scala 异常处理
  • 【Qt】事件、qt文件
  • 搭建prometheus+grafana监控系统抓取Linux主机系统资源数据
  • Vue-Cli
  • 工业 4G 路由器赋能远程医疗,守护生命线
  • Python的循环
  • 算法第十九期——图论初入门
  • Java多线程
  • CSS Grid 网格布局详解
  • 【故障检测】基于 KPCA 的故障检测【T2 和 Q 统计指数的可视化】(Matlab代码实现)
  • 【华为OD机试 2023最新 】新学校选址(C++ 100%)
  • 解析springboot源码中this::selfInitialize怪异用法的含义
  • C++11右值引用
  • 华为OD机试用java实现 -【吃火锅】
  • ChatGPT辅助编程实践——常用提示词整理
  • CentOS从gcc 4.8.5 升级到gcc 8.3.1
  • 初识Kafka
  • 八. MySQL 成本计算与执行优化器优化步骤
  • 1014 福尔摩斯的约会
  • 下一代的新操作系统就是ChatGPT!
  • 最值得入手的五款骨传导耳机,几款高畅销的骨传导耳机
  • 我的第一台手提 | 关于你的第一台手提征文活动
  • PyTorch加载自己的数据集
  • 第一台电脑(创作活动水点经验)
  • 电电电电电电电电要来了!
  • Unity——λ表达式(匿名函数)/Linq/回调函数