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;
}
#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;
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);
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)
不知是不是这一块不懂。
for(i=2;i<=sqrt(n);i++)
意思是:
假设n(存在)最大约数是i,那肯定有i*i<=n,
即i<=(√n)
sqrt()是c语言中求方根的函数
所以有i<=sqrt(n)
不知是不是这一块不懂。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯