选择素数并求和 结果不正确

结果不正确

img

要在内层for循环确定所有数都不能整除才进行累加,而且终止条件为i<M,你现在的效果应该是对所有奇数进行了求和

#include<cstdio>

#include<cmath>

int main()
{
    int m,n,a = 0,sum = 0;

    scanf("%d%d",&m,&n);
    
    while(m<n)
    {
        for(int i = 2;i <= sqrt(m);i++)
        
            if(m % i == 0)
            {
                break;
            }
            
            else
            
            {
                a++;
                
                sum += m;
                
                break;
            }
        
        m ++;
    }
    
    printf("%d %d",a,sum);
}

把for循环的m改成sqrt(m)就行了

代码修改如下:

#include <stdio.h>
int main()
{
    int M,N,A,i,sum;
    A=0;
    sum = 0;
    scanf("%d",&M);
    scanf("%d",&N);
    while(M<N)
    {
        for(i=2;i<M;i++) //注意是小于,不是小于等于
        {
            if(M%i==0)
                break;
        }
        if(i==M) //是素数,注意这里的写法
        {
            A++;
            sum = sum + M;
        }
        M++;
    }
    printf("%d %d",A,sum);
    return 0;
}