#include
int main(){
int n,i=1,j,count=0;
int a[1001];
while(~sacnf("%d",&n)){
for(i=2;;i++){
if(n%i==0){
break;
}else{
a[j++]=i;
if(j==1000)break;
}
}
for(j=1;j<=n;j++){
if(j==1){
printf("%d",a[j]);
}else{
printf(",%d",a[j]);
}
}
}
}
任务描述
编程找出前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
输入样例:
996 997 998 999 1000
输出样例:
7879,7883,7901,7907,7919
不是sacnf函数,应该改成scanf
你的逻辑有有问题,应该先从2循环到1000找出所有素数,存到数组a中。然后获取输入的n,存放到数组 b中,循环数组b,用j循环,则输出a[j]即可。望采纳
编译下嘛
这个代码里有很多语法错误和逻辑错误。
1.不应该用scanf读入n,而应该用while(scanf("%d", &n) != EOF),表示直到文件结束为止。
2.不应该在循环里面计算素数,而应该在输入之前把前1000个素数存放到数组中。
3.不应该用n%i==0判断是否是素数,而应该用素数筛法。
正确代码如下:
#include <stdio.h>
int main() {
int n, a[1001], cnt = 0;
for (int i = 2; cnt < 1000; i++) {
int flag = 1;
for (int j = 2; j * j <= i; j++) {
if (i % j == 0) {
flag = 0;
break;
}
}
if (flag) {
a[cnt++] = i;
}
}
while (scanf("%d", &n) != EOF) {
printf("%d", a[n - 1]);
if (n < 1000) {
printf(",");
}
}
return 0;
}