C语言使用函数求素数和,帮忙看看哪儿错了

2025-03-11 00:08:06
推荐回答(1个)
回答1:

//楼主判定"素数"的算法需要改善,可参考其他网友的算法.

#include 
#include 

int prime( int p );
int PrimeSum( int m, int n );

int main()
{
    int m, n, p;

    scanf("%d %d", &m, &n);
    printf("Sum of ( ");
    for( p=m; p<=n; p++ )
    {
        if( prime(p) != 0 )
        printf("%d ", p);     //输出素数
    }
    printf(") = %d\n", PrimeSum(m, n));

    return 0;
}

int prime( int p )
{
    int m=p;
    while(m>1)
    {
        m--;
        //在函数prime里,如果p是素数,当循环到m等于2,在执行m--之后,m就等于1,
        //再执行if(p%m==0),必然return 0
        //所以,在m--之后,增加一句if(1==m) return 1;
        if(1==m)
        {
           return 1;
        }
        if(p%m==0)
        {
            return 0;
        }

    }
    return 1;
}
int PrimeSum( int m, int n )
{
    int result=0;
    for(m;m<=n;m++)
    {
        if(prime(m)!=0)
        result=result+m;
    }
    return result;
}