解题思路:
1.先编写主程序,输入m和n,并在主程序中用for循环列举出m到n的所有数;

2.将m到n中每个数调到isprime函数中进行判断,处理,如果那个数是素数,则返回原值进行累加;不是素数,则返回0这个数字进行累加就等于把不是素数的数略掉了);

3.输出m到n所有数字累加后的值。

注意事项:

            这个是拓展知识,把这题弄懂后有兴趣的伙伴可以看一下

     这里调用了库函数math,就是为了写出sqrt(开方的指令)在isprime函数的判断中,我用j小于x的开方来做限制条件(参照代码),为什么我不用j小于x的1/2做限制条件呢?

    是因为一个数的开方,就是它最大的因数。比如9的开方是3,9的因数是1,3;  25的开方是5,25的因数是1,5。

    这样做有什么好处呢?比如如果我们想判断100000是否是素数,用10000的1/2来做限制条件,for语句判断时要执行5000次;而用10000的开方来做限制条件,for语句判断时只用执行100次,相比起来,就节约了很多内存。

参考代码:

#include

#include

int isprime(int x)

{

    int j,flag=0;

    if(x==1) return 0;//先敲定1不是素数 (因为此判断程序无法正确判断1是不是素数) 

    for(j=2;j<=sqrt(x);j++)//判断素数 

    {

        if(x%j==0)

        {

            flag=1;

            break;//判断出了此数不为素数,即可跳出循环,节约内存 

        }

    }

    if(flag==0) return x;//是素数返回原值 

    else return 0;//不是素数返回 0 


}

int main()

{

    int i,s=0,m,n,k;

    scanf("%d%d",&m,&n);//输入始末值 

    for(i=m;i<=n;i++)//m到n 

    {

        k=isprime(i);//将m到n中每个数调到isprime函数中进行判断,处理,并用返回到k中

        s+=k;//累加 

    }

    printf("%d",s);

    return 0;

}


点赞(0)
 

0.0分

2 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论