列表

详情


NC22938. 丑数

描述

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

输入描述

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

输出描述

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

示例1

输入:

4 19
2 3 5 7

输出:

27

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(g++ 7.5.0) 解法, 执行用时: 22ms, 内存消耗: 1156K, 提交时间: 2022-11-20 19:41:20

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+100;
int a[N];
int b[N],num[N];
signed main()
{
    int k,n;
    cin>>k>>n;
    for(int i=1;i<=k;i++)    cin>>a[i];
    num[0]=1;
    int ans,last=1;
    for(int i=1;i<=n;i++)
    {
        ans=2e9;
        for(int j=1;j<=k;j++)
        {
            while(a[j]*num[ b[j] ]<=last)    b[j]++;
            ans=min(ans,a[j]*num[ b[j] ]);
        }
        last=ans;
        num[i]=ans;
    }
    cout<<ans<<endl;
    return 0;
}

C++11(clang++ 3.9) 解法, 执行用时: 39ms, 内存消耗: 760K, 提交时间: 2019-08-25 19:25:26

#include<bits/stdc++.h>
using namespace std;
int a[110],b[110],hum[1000010];
int main(){
	int n,m,dmin;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	cin>>a[i];
	int las=1;
	hum[0]=1;
	for(int i=1;i<=m;i++){
		dmin=2e9;
		for(int j=1;j<=n;j++){
			while(a[j]*hum[b[j]]<=las)
			b[j]++;
			dmin=min(dmin,a[j]*hum[b[j]]);
		}
		las=dmin;
		hum[i]=las;
	}
	cout<<dmin<<"\n";
	return 0;
}

上一题