质数(英文名:Prime number)又称素数,是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。质数又称素数。
以100~200之间的素数计算为例,通过以下C语言程序可以很容易地实现。需要包含头的文件有stdio.h。
#include<stdio.h>
int main()
{
int i = 0;
for (i = 100; i <= 200; i++)
{
//判断i是否为素数
//产生2~i-1的数字,去试除i
int flag = 1;//假设i是素数
for (int n = 2; n <= i - 1; n++)
{
if (i % n == 0)
{
flag = 0;//i不可能是素数
break;
}
}
if (flag)//是素数
{
printf("%d ", i);
}
}
return 0;
}
接下来,为进一步优化程序,我们可以运用如下两条数学性质:
- 对于任意两个正实数
a和b,若a x b = c,则a ≤ √c或b ≤ √c(即至少有一个数不超过√c)。如果在2~√c都没有找到能整除i的数,则i是素数。- 偶数不可能是素数。
因此,修改内部for循环的判断条件为n <= sqrt(i);外部for循环为for (i = 101; i <= 200; i+=2)。需要包含头的文件有stdio.h和math.h。
sqrt() 是 C 标准库math.h中的一个函数,用于计算一个非负数的平方根。
#include<stdio.h>
#include<math.h>
int main()
{
int i = 0;
for (i = 101; i <= 200; i+=2)
{
//判断i是否为素数
//产生2~i-1的数字,去试除i
int flag = 1;//假设i是素数
for (int n = 2; n <= sqrt(i); n++)
{
if (i % n == 0)
{
flag = 0;//i不可能是素数
break;
}
}
if (flag)//是素数
{
printf("%d ", i);
}
}
return 0;
}
如此一来,有效减少了内外层循环需要执行的次数。
正文完
参考资料:
(素数)baike.baidu.com/item/%E8%B4…
(C 库函数 - sqrt())www.runoob.com/cprogrammin…