永发信息网

C语言:利用int prime(int n)函数,实现输出100~300之间所有素数。

答案:5  悬赏:0  手机版
解决时间 2021-03-26 11:51
C语言:利用int prime(int n)函数,实现输出100~300之间所有素数。
最佳答案
素数就是一个大于1的自然数,除了1和它本身外,不能被其他自然数整除
#include 

int IsPrime(int n)
{
    if (n <= 1) return 0;
    if (n % 2 == 0) return n == 2;

    for (int i = 3; ; i += 2)
    {
        if (i > n/i) break;  // 等价于 i*i > n, 不用开方
        if (n % i == 0) return 0;
    }
    return 1;
}

int main()
{
    for (int n = 100; n <= 300; n++)
        if (IsPrime(n))
            printf("%4d", n);
    return 0;
}
全部回答
应该是i<=sqrt(n)
如果一个数是合数,那么它的所有因子将不会超过它的开方
{
if(n%i==0) 如果n被i除尽,那说明n不是素数
return(0);
}
比n小的所有i都不能除尽n,循环结束,那不就说明n满足素数的定义吗?
return 1;
一个素数它只能被1和它自身整除,而不能被其他整数整除,这样判断一个数是素数我们关键就看它是否能被在1~它自身范围内的值其他值整除了。一个很正常的思路就是
for(i=2; i{
if(n%i==0)
return 0;
}
return 1;
我们再来看看我们循环的范围是否一定需要2~n-1,不一定,我们可以优化一下程序,循环的范围只需要2~sqrt(n) (n平方根)就行了,想一想,判断一个数n能否整除大于sqrt(n)的数这是没必要的,因为这里肯定不能整除。还有这for循环中应该是i<=sqrt(n);
for(i=2;i最好改为
for(i=2;i<=sqrt(n);i++)
意思是:
假设n(存在)最大约数是i,那肯定有i*i<=n,
即i<=(√n)
sqrt()是c语言中求方根的函数
所以有i<=sqrt(n)
不知是不是这一块不懂。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
机械制图中 φ40js5 是什么意思?
怎么样通过关键词做成淘口令把自己的宝贝卡在
劳特牌插座好不好
什么是岩石风化
MPAcc/MBA/公务员考试的一道逻辑题—
请问我怎么播放百度云资源里的swf文件视频
我想在南康或者赣州买电脑,有人知道哪里有按
把0.125化成最简分数是多少
求助mac sierra的输入法快捷键怎么调
网易新闻到底是怎么回事,内容偏激,评论白痴
哪个明星名字带有巨这个字
运气不好、差点把人撞死。还好佛祖保佑 人小
怎样才能学会一口地道的伦敦腔?(排除出国的
试论民事责任的概念、特征以及其归责原则
在城市里养狗需要注意什么?
推荐资讯
法院大厅不能拍照吗?
为什么潮州人喝茶最多只用三只杯子?
家装一般用什么材料?
每天早上恶心干呕 是怎么回事
卖家卖同一个商品不同人不同价格
男的说比如不喜欢我你就不会习惯是啥意思
QC的“七大作业手法”和“四大原则”分别是什
She reads English books ( ) Chinese medici
怎么把maya建好的模型导入另一个maya中
海贼王中路飞一共有几档? 作用分别是什么
为什么胸部对准的后背这么那么痛,
500-x+200=350求解
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?