H2330819074


私信TA

用户名:dotcpp0692243

访问量:1026

签 名:

大鹏一日同风起,扶摇直上九万里

等  级
排  名 507
经  验 4444
参赛次数 1
文章发表 17
年  龄 19
在职情况 学生
学  校 贺州学院
专  业 软件工程

  自我简介:

TA的其他文章

解题思路:
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分

2 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区