[编程题] 无平方数因数的数

如果一个正整数不能被大于1的完全平方数所整除,那么我们就将该数称为无平方数因数的数。例如,靠前的一些无平方数因数的数是{1,2,3,5,6,7,10,11,13,14,15,17,19…}。创建一个class SquareFree,其中包括一个函数getNumber,在给定一个int n后,该函数能够返回第n个最小无平方因数的数。请注意这里是从1开始的,那么如果n=1,该算法将会返回最小的无平方数因数的数。

n 的取值范围为1到1,000,000,000(其中包括1和1,000,000,000)

 for (int i = 0; ; i++) {//死循环用于循环判断
            Scanner in=new Scanner(System.in);
            int sum=in.nextInt();
            if(sum==0){//退出
                break;
            }
            sum+=(int)Math.sqrt(sum)-1;//用输入的值去开平方得到的结果的整数就说明有多少个平方数,减1是排除1,
            System.out.println(sum);
        }

i从1到1,000,000,000,开始循环,循环体里检测i是否符合(符合条件是从1到sqr(i),不能被大于1的完全平方数所整除),符合条件count++,如果count==n,退出循环结束

 #include<iostream>
using namespace std;
#define maxn 1000
int vis[maxn];
int main()
{
    int n;
    cin >> n;
    int m = sqrt(n + 0.5);
    for (int i = 2; i <= m; i++)//if (!vis[i])
    {
        for (int j = i*i; j <= n; j += i)vis[j] = 1;
    }
    for (int i = 1; i <= n; i++)
    {
        if (vis[i] == 0)cout << i << " ";
    }
    cout << endl;
    return 0;
}