#include<stdio.h>
#include<math.h>
#define size 100
int main()
{
int n;
printf("Enter the value of n\n");
scanf_s("%d",&n);
int A[size],i;
for(i=0;i<n+1;i++)
{
A[i]=i;
}
A[1]=0;
for(i=0;i<sqrt((float)n);i++)
{
for(int j=0;j<n+1;j++)
{
if(A[j]%i==0)A[j]=0;
else A[j]=j;
}
}`
for(i=0;i<n+1;i++)
{
if(A[i]!=0)printf("%d\n",A[i]);
}
}
答案 0 :(得分:0)
一些意见:
for(i=0;i<sqrt((float)n);i++)
中,您需要迭代到n+1
,就像在其他循环中一样。i=0
开始,然后if(A[j]%i==0)
除以零。以下是您的代码的可能更正:
#include<stdio.h>
#include<math.h>
#define size 100
int main() {
int n;
printf("Enter the value of n\n");
scanf_s("%d",&n);
int A[size], i, j;
A[0] = 1; //zero is not prime, mark it with: 1
A[1] = 1; //...same for one
for(i=2; i < n+1; i++)
A[i] = 0;
for(i=2; i < sqrt((float) n+1); i++) //loop from first prime to sqrt(n+1)
if (A[i] == 0) //if is unmarked, is prime, THEN
for(j = i*i; j < n+1 ; j = j + i) //mark prime's multiples
A[j] = 1;
for(i=0; i < n+1 ;i++) //now visit each cell, and print the unmarked ones
if (A[i] == 0)
printf("%d\n", i);
}
9的输出:
2
3
5
7
答案 1 :(得分:0)
A [j]%i在你的程序中不正确。
我在下面的代码中实现了Erathosthemes筛选 -
#include<stdio.h>
int main()
{
int a[20];
int i,n,j;
n=20;
for(i=0;i<n;i++)
a[i]=i+1;
for(i=2;i<n/2;i++)
{
for(j=2;j<=(n/i);j++)
{
a[(i*j)-1]=0;
}
}
for(i=0;i<n;i++)
{
if(a[i]!=0)
printf(" %d",a[i]);
}
return 0;
}