直接枚举N个数,用index数组来记录每个质数乘到第几个数了。
/*
PROG:humble
LANG:C++
*/
#include <cstdio>
using namespace std;
const int MAXINT = ~0U>>1;
const int N = 100001;
int k, n, a[101], index[101], ans[N], min, tot, minK, minJ;
char ch;
int main()
{
freopen("humble.in", "r", stdin);
freopen("humble.out", "w", stdout);
scanf("%d%d", &k, &n);
for (int i = 1;i <= k;++i) scanf("%d", &a[i]);
ans[tot++] = 1;
while (n--)
{
min = MAXINT;
for (int i = 1;i <= k;++i)
for (int j = index[i]; ;j++)
{
int tmp = ans[j] * a[i];
if (tmp > ans[tot-1])
{
index[i] = j;
if (tmp < min)
{
min = tmp;
minK = i;
minJ = j+1;
}
break;
}
}
index[minK] = minJ;
ans[tot++] = min;
}
printf("%d\n", ans[tot-1]);
}
本文介绍了一种用于生成特定序列的算法实现,该序列由一系列质数的倍数组成,并通过不断更新最小值来确保序列的递增。算法使用C++编写,通过维护多个指针跟踪每个质数倍数的位置,高效地生成了所需的序列。
1054

被折叠的 条评论
为什么被折叠?



