c语言用数组和函数求出200以内素数的问题

img

img


想问下哪里出了问题,打印会打印很多遍,打印的素数除了4以外其他都是对的

附上代码
#include <stdio.h>
int sum(int number);
int main() {
int a,m,i,g;
int n = 200;
int prime[n];
for(i=2;i<n;i++){
prime[i] = 1;
}
for(a=2;a<n;a++){
g = sum(a);
if(g==0){
for(m=2;am<n;m++){
prime[m
a]=0;
}
}
for(i=0;i<n;i++){
if(prime[i]==1){
printf("%d\n",i);
}
}
}
return 0;
}

int sum(int number){
int b;
int x;
int i=number-1;
for(;i>1;i--){
x = number%i;
if(x==0){
b=1;
break;
}else {
b=0;
}
return b;
//b=0则是素数
}
}

修改如下,供参考对照:

#include <stdio.h>
int sum(int number);
int main() {
    int a, m, i, g;
    const int n = 200;
    int prime[n];
    for (i = 2; i < n; i++) {
        prime[i] = 1;
    }
    for (a = 2; a < n; a++) {
        g = sum(a);
        if (g == 0) {
            for (m = 2; a*m < n; m++) {
                prime[m*a] = 0;
            }
        }
    }
    for (i = 0; i < n; i++) {
        if (prime[i] == 1) {
                printf("%d\n", i);
        }
    }
    
    return 0;
}

int sum(int number) {
    int b=0;
    int x;
    int i = number - 1;
    for (; i > 1; i--) {
        x = number % i;
        if (x == 0) {
            b = 1;
            break;
        }
    }
    //else {
    if(i==1) b = 0;
    //}
    return b;
    //b=0则是素数
}