慕课:我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推。给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。

发布于:2022-10-18 ⋅ 阅读:(467) ⋅ 点赞:(0)

 

#include <stdio.h>
int main()
{
    int n,m;//限定范围 
    int isPrime,sum = 0;//isPrime用来判断是不是素数,sum是素数求和 
    scanf("%d %d", &n, &m);
    int s = 0;//用来计算素数的个数 
    int x=2, t=2;//素数从2开始计数,t是作t++运算,逐个与x取余 ,x是从2开始找素数 
    //printf("%d %d\n",x,t);    
        if( 0 < n <= m <= 200 )//控制n、m的范围 
        {            
            while ( s<m )//素数个数<m时,还要继续做运算 
            {
                while ( t<x )//素数不需要和它自身相除 
                {
                    if ( x%t == 0)//判断是否是素数 
                    {
                        isPrime = 1;//不是素数,isPrime值变为1.则s不会增加,sum也不变 
                        //printf("here,%d=x\n", x);
                        break;    //只要找到一个数证明x不是素数就可以结束循环                                    
                    }
                    t++;//遍历2到n-1范围内所有的数  
                }                            
                if ( isPrime == 0 )//是素数 
                {                
                    s++;
                    //printf("s=%d\n", s);
                    if ( s>=n && s<=m)//符合 [n,m]的区间 
                    {
                        sum += x;
                        //printf("sum=%d", sum);
                    }
                }
                
                x++;//无论是不是素数,都要让x的值+1,才能找下一个素数 
                //printf("x=%d\n", x);
                t = 2;//每轮都要重新给t赋值,从2开始遍历 
                isPrime = 0; //重新给isPrime赋值遍历 
                
                //printf("s=%d\n", s);                        
            }
        }                        
    printf("%d", sum);
    return 0;    
}


网站公告

今日签到

点亮在社区的每一天
去签到