#include <iostream>
using namespace std;
const int N = 100010;
int a[N];
int main()
{
int n; cin >> n;
for(int i = 1; i <= n; i++)
{
a[i] = 1;
}
for(int i = 1; i <= n; i++)
{
// 将灯全部关闭
if(i == 1)
{
for(int j = 1; j <= n; j++)
{
a[j] = 0;
}
}
// 将2和2的倍数的灯全部打开
else if(i == 2)
{
for(int j = 2; j <= n; j += 2)
{
a[j] = 1;
}
}
// 将i的倍数的灯做相反操作
else
{
for(int j = i; j <= n; j += i)
{
if(a[j] == 1)
{
a[j] = 0;
}
else
{
a[j] = 1;
}
}
}
}
// 输出灯亮的灯的下标
for(int i = 1; i <= n; i++)
{
if(a[i] == 1)
{
cout << i << " ";
}
}
return 0;
}
直接输出 1~n 中不是平方数的数不就行了吗(
感谢感谢,我去优化一下