问题描述 :
对于一给定的素数集合 S = {p1, p2, …, pK}, 来考虑那些质因数全部属于S 的数的集合。这个集合包括,p1, p1p2(即p1乘以p2), p1p3, 和 p1p2p3 (还有其它很多)。这是个对于一个集合S的丑数集合。
注意:我们不认为1 是一个丑数。你的工作是对于输入的集合S去寻找集合中的第N个丑数。
说明:结果不超过32位整数能表示的范围
比如:S={2, 3, 5, 7}
则前15个丑数为:2,3,4,5,6,7,8,9,10,12,14,15,16,18,20
输入说明 :
第 1 行: 2个被空格分开的整数:K 和 N , 1<= K<=100 , 1<= N<=100,000.
第 2 行: K 个被空格分开的整数,即集合S的元素输出说明 :单独的一行,即第N个丑数。
输出说明 :
单独的一行,即第N个丑数。
#include<stdio.h>
int main()
{
int k,n,a[102],b[102];
int i,j;
long long s[100001];
scanf("%d %d",&k,&n);
for(i=1;i<=k;i++)
scanf("%d",&a[i]),b[i]=1;
s[1]=1;
for(i=2;i<=n+1;i++)
{
s[i]=0x7fffffff;
for(j=1;j<=k;j++)
{
while(a[j]*s[b[j]]<=s[i-1])
b[j]++;
if(a[j]*s[[b[j]]<s[i])
s[i]=a[j]*s[b[j]];
}
}
printf("%lld\n",s[n+1]);
return 0;
}