第3关:任务08-01-03 输出第N个素数

第3关:任务08-01-03 输出第N个素数
任务描述
编程找出前1000个素数存放到数组中,然后输入一个整数N,输出第N个素数的值。

输入格式:
输入有多组数据,为若干个空格分隔的整数。

输出格式:
对于输入数据中每个n,输出第n个素数的值,多个输出之间以逗号分隔。

输入样例:
1 2 3 4 5 4 3
输出样例:
2,3,5,7,11,7,5
输入样例:
5 8 9 10 100 200
输出样例:
11,19,23,29,541,1223

#include <stdio.h>
#define MAX_SIZE 10000

int main()
{
    int prime[MAX_SIZE];
    int n, i, j, isPrime;

    // 找出前1000个素数
    prime[0] = 2;
    n = 1;
    i = 3;
    while (n < 1000)
    {
        isPrime = 1;
        for (j = 0; j < n; j++)
        {
            if (i % prime[j] == 0)
            {
                isPrime = 0;
                break;
            }
        }
        if (isPrime)
        {
            prime[n] = i;
            n++;
        }
        i += 2;
    }

    // 输入n并输出第n个素数
    while (scanf("%d", &n) != EOF)
    {
        printf("%d", prime[n - 1]);
        if (getchar() == '\n')
        {
            putchar('\n');
        }
        else
        {
            putchar(',');
        }
    }

    return 0;
}

供参考:

#include <stdio.h>
#define N 1001
void Init(int* a, int n)
{
    int i, j, k, flg;
    for (i = 1, k = 0; k < n; i++)
    {
        for (j = 2, flg = 1; flg && j * j <= i; j++)
            if (i % j == 0)  flg = 0;
        if (flg)
            a[k++] = i;
    }
}
int main()
{
    int a[N], n, k = 0;
    Init(a, N);
    while (scanf("%d", &n) == 1) { //输入 0 或 ctrl + z 回车 结束输入
        if (n <= 0) {
            break;
        }
        else
            printf(k++ == 0 ? "%d" : ",%d", a[n]);
    }
    return 0;
}