USACO--寻找丑数

寻找丑数

题目描述:

对于一给定的素数集合 S = { p1, p2, ... , pk  } , 来考虑正整数集合中哪些数的质因数全部属于S。
这个正整数集合包括,p1, p1p2, p1p1, 和 p1p2p3 (还有其它)。这是个对于一个输入的S集合的丑数集合。 注意:我们不认为1 是一个丑数。 你的工作是对于输入的集合S去寻找集合中的第N个丑数。long long对于程序是足够的。

输入格式:

第 1 行: 二个被空格分开的整数:K 和 N , 1<= K<=100 , 1<= N<=100,000. 第 2 行: K 个被空格分开的整数:集合S的元素

输出格式:

单独的一行,写上对于输入的S的第N个丑数。

样例输入:
4 19
2 3 5 7
样例输出:
27

时间限制: 500ms
空间限制: 128MB


来源: USACO

#include<bits/stdc++.h>
using namespace std;
int k,n;
int a[105];
int q[105];
int s[100005];
int main() {
	scanf("%d%d",&k,&n);
	s[0]=1;
	for(int i=1; i<=k; ++i)
		scanf("%d",&a[i]),q[i]=0;
	int K=0;
	int minn;
	while(K<n) {
		minn=2e9;
		for(int i=1; i<=k; ++i)
			if(s[q[i]]*a[i]<minn)
				minn=s[q[i]]*a[i];
		for(int i=1; i<=k; ++i)
			if(s[q[i]]*a[i]==minn)
				q[i]++;
		s[++K]=minn;
	}
	cout<<minn<<endl;
	return 0;
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值