USACO官方解法:为了实现起来更简单,我们把1也作为一个丑数。当我们已知前k个丑数,想得到k+1个,可以这样做:对于每个质数p 寻找最小的丑数h使得h*p比上一个丑数大取我们找到的h*p中最小的一个:它就是下一个丑数为了使搜索更快,我们可以为每个质数维护一个索引"pindex”表示每个质数已经乘到了哪个丑数,每次都从那里开始,而不是再从头再来。
/*ID:jzzlee1PROB:humbleLANG:C++*///#include#include #include #include #include using namespace std;ifstream cin("humble.in");ofstream cout("humble.out");long chou[100010];int p[110],pa[110];int main(){ int i,k,n,num=1; cin>>k>>n; for(i=0;i >p[i]; chou[0]=1; while(num!=n+1) { long long min=0x7FFFFFFF; int m=-1; for(i=0; i