您的位置:首页 > 编程语言 > C语言/C++

C语言如何判断一个数是素数,输出100-200之间的全部素数。

2016-04-11 19:53 603 查看
素数又称质数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数。

#include<stdio.h>

int Sushu(int a);
int main()
{
int n = 0, res = 0;

for (n = 100; n < 200; n++)
{

res = Sushu(n);
if (res == 1)
printf("%4d", n);
}

system("pause");
return 0;
}

int Sushu(int a)
{
int i = 0;

for (i = 2; i < a; i++)
{
if (a % i == 0)
return 0;       //如果不是素数返回0
}
return 1;              //如果是素数返回1
}
此时,素数判断函数里的循环条件i是从2到a,即这个数本身,显然这是没有必要的。因为要判断这个数是不是素数根本不用这么大范围的循环条件,可以一步步的缩小循环条件的范围,使程序更高效。

我们知道如果一个数a不是素数,那么它一定可以看成是a/2之前的某个数的倍数,那么循环条件i的范围可以缩小为2到a/2。

for (i = 2; i < a / 2; i++)
{
if (a % i == 0)
return 0;
}
此时的程序效率要比之前的快一倍。然而我们还可以进一步提高它的效率。

因为如果一个数不是素数是合数,
那么一定可以由两个自然数相乘得到, 其中一个大于或等于它的平方根,一个小于或等于它的平方根。并且成对出现。那么这时循环条件i的范围可以缩小为2到sqrt(a),值得注意的是这里一定要包括sqrt(a),要不然计算结果会有遗漏。

for (i = 2; i <=sqrt(a); i++)
{
if (a % i == 0)
return 0;
}

在这里调用了库函数sqrt()来计算a的开方值,所以头文件要包含这个函数的库#include<math.h>。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: