第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;
}