素数求和,有错误,找不到了

#include<stdio.h>

int prime(int a[]){
int i,flag,m,x=0;
for(i=2;i<=1000;i++){
flag=0;
for(m=2;m<=i;m++){
if(i%m==0){
flag=1; break;
}
}
if(flag==0){
a[x]=i;
x++;
}
}
return x;
}

void print(int a[],int x){
int i;
for(i=0;i<x;i++){
printf("%d",a[i]);
}
}

int sum(int a[],int x){
int i,s;
s=0;
for(i=0;i<x;i++){
s=s+a[i];
}
return s;
}

int main(){
int a[1000],s,x;
x=prime(a);
print(a,x);
s=sum(a);
printf("%d\n",s);
return 0;
}

修改处见注释,供参考:

#include <stdio.h>
int prime(int a[]) {
    int i, flag, m, x = 0;
    for (i = 2; i <= 1000; i++) {
        flag = 0;
        for (m = 2; m*m <= i; m++) {  //修改
            if (i % m == 0) {
                flag = 1; break;
            }
        }
        if (flag == 0) {
            a[x] = i;
            x++;
        }
    }
    return x;
}

void print(int a[], int x) {
    int i;
    for (i = 0; i < x; i++) {
        printf(i==0?"%d":" %d", a[i]); //修改
    }
    printf("\n");
}

int sum(int a[], int x) {
    int i, s;
    s = 0;
    for (i = 0; i < x; i++) {
        s = s + a[i];
    }
    return s;
}

int main() {
    int a[1000], s, x;
    x = prime(a);
    print(a, x);
    s = sum(a, x);//修改
    printf("%d\n", s);
    return 0;
}

自定义函数prime中,第二个for循环条件m<=i是错的,应该是m<i
素数:相当于质数,除了1和本身外,不能被其它数整除。