思路:素数筛处理出所有素数,枚举每个素数p,可以知道如果p^k<n,则p^k一定需要选,根据这个原则求出所有要猜的数。
#include<bits\stdc++.h>
using namespace std;
const int maxn = 1105;
int b[maxn];
int a[maxn];
int prim()
{
memset(a,0,sizeof(a));
for(int i = 2;i<=maxn;i++)
{
if(!a[i])
a[++a[0]] = i;
for(int j = 1;j<=a[0]&&a[j]<=maxn/i;j++)
{
a[a[j]*i]=1;
if(i%a[j]==0)
break;
}
}
}
int main()
{
int n;
cin >> n;
prim();
int pos = 0;
for(int i = 1;i<a[0];i++)
{
int temp = a[i];
int p = 1;
for(int j = 1;j<maxn;j++)
{
p*=a[i];
if(p<=n)
b[pos++]=p;
else
break;
}
if(temp > n)
break;
}
cout << pos << endl;
if(pos>=1)
cout << b[0];
for(int i = 1;i<pos;i++)
cout << " " << b[i];
cout << endl;
}