【题解】丑数Humble Numbers-C++
2024-09-27 04:29:38
题目描述
Description
对于一给定的素数集合 S = {p1, p2, …, pK},如果一个数字,当我们对其做完质因子分解后,其质因子全是来自我们给定的素数集合,则认为这个数字是个丑数。
注意:我们不认为1 是一个丑数。
你的工作是对于输入的集合S去寻找第N个丑数。
Input
第 1 行: 二个被空间分开的整数:K 和 N , 1<= K<=100 , 1<= N<=100,000.
第 2 行: K 个被空间分开的整数:集合S的元素
Output
第N个丑数。
Sample Input
4 19
2 3 5 7
Sample Output
27
思路
为了找第i个丑数,那么一定要比第i-1个丑数大,而且是最小的那一个,可以发现比i-1大的丑数一定是比i-1小的丑数乘某个质数得到的,鉴于质数的数量很少,而丑数的数量很大,我们枚举质数,然后枚举丑数,直到大于第i-1个丑数,记录一下,找到所有的符合条件的丑数以后,找出最小值(也可以在寻找的途中更新最小值),那么这个最小值就是第i个丑数。
代码
#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[],b[],s[]={};
int main()
{
cin>>n>>m;
for(int i=;i<=n;i++)
cin>>a[i];
for(int i=;i<=m;i++)
{
int minn=0x7f7f7f7f;
for(int j=;j<=n;j++)
{
while(a[j]*s[b[j]]<=s[i-])
{
b[j]++;
}
if(a[j]*s[b[j]]<minn)
minn=a[j]*s[b[j]];
}
s[i]=minn;
}
cout<<s[m]<<endl;
return ;
}
最新文章
- bzoj 1061 志愿者招募 有上下界费用流做法
- Selenium通过WebDriver控制IE浏览器出错 Browser zoom level was set to 109%. It should be set to 100%
- 利用google api生成二维码名片例子
- C#自学笔记总结
- 基于 HTML5 WebGL 的 3D 网络拓扑图
- 你不得不了解的应用容器引擎---Docker
- socke编程
- Gradle 1.12 翻译——第十八章. 日志
- ||与&;&;的返回值
- linux----------fedora 27 如何打开ssh,可以远程链接
- 更新Xcode10与iOS12 遇到的bug:library not found for -lstdc++.6.0.9
- nginx rate limit
- 线程安全问题.md
- 对仿真glbl.v文件的理解
- 学习笔记之Lazy evaluation
- 微信小程序 按钮点击跳转页面
- Codeforces Round #294 (Div. 2)A - A and B and Chess 水题
- bootstrap正则表达式验证手机 座机 邮箱
- [Leetcode] Binary tree maximum path sum求二叉树最大路径和
- Laravel使用ORM操作数据