永发信息网

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

答案:5  悬赏:0  手机版
解决时间 2021-03-26 11:51
  • 提问者网友:饥饿走向夜
  • 2021-03-25 14:13
C语言:利用int prime(int n)函数,实现输出100~300之间所有素数。
最佳答案
  • 五星知识达人网友:第四晚心情
  • 2021-03-25 14:37
素数就是一个大于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;
}
全部回答
  • 1楼网友:平生事
  • 2021-03-25 18:50
应该是i<=sqrt(n)
如果一个数是合数,那么它的所有因子将不会超过它的开方
  • 2楼网友:杯酒困英雄
  • 2021-03-25 17:20
{
if(n%i==0) 如果n被i除尽,那说明n不是素数
return(0);
}
比n小的所有i都不能除尽n,循环结束,那不就说明n满足素数的定义吗?
return 1;
  • 3楼网友:迷人又混蛋
  • 2021-03-25 15:57
一个素数它只能被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);
  • 4楼网友:由着我着迷
  • 2021-03-25 15:43
for(i=2;i最好改为
for(i=2;i<=sqrt(n);i++)
意思是:
假设n(存在)最大约数是i,那肯定有i*i<=n,
即i<=(√n)
sqrt()是c语言中求方根的函数
所以有i<=sqrt(n)
不知是不是这一块不懂。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯