判断质数的5个C语言程序

判断质数的5个C语言程序
判断质数的5个C语言程序

判断质数的5个C语言程序(含代码)

——程序优化的重要性

质数

质数是指在一个大于1的自然数中,除了1和它本身之外,无法被其他自然数整除的数。

本文将会带领大家编写计算质数的程序。

质数计算程序(第1版)

判断一个数mo是否为质数的方法就是看它能否被2、3、……、mo-1整除、如果它不能被其中任何一个整数整除,那么这个数就是质数。例如我们要判断13是不是质数,就需要看它能否被下面这11个数整除。

2、3、4、5、6、7、8、9、10、11、12/*通过11次除法计算来判断其是否为质数*/

因为13无法被其中任何一个数整除,所以可以确定它是质数。

但是对于12来说,并不需要使用2、3、4、5、6、7、8、9、10、11这十个数来判断它是

不是质数。也就是说,12能够被第一个数2整除,所以它就不是质数。

程序代码ver1:(绿色部分)

/*30-5-2017*/

/*计算出1000以内的质数*/

#include

int main()

{

inti,no;

int counter=0;

for(no=2;no<=1000;no++)

{

for (i=2;i

{

counter++;

if (no%i==0) /*能被整除的不是质数,取余操作*/

break; /*退出循环*/

}

if (no==i)/*直到最后未被整除*/

printf("%d\n",no);

}

printf("乘除运算的次数:%d\n",counter);

return 0;

}

运算结果:

*注意,这个程序的乘除运算次数为78022次。

质数计算程序(第2版)

我们注意到,大于2的所有偶数都不是质数,所以在判断1000以内的质数时可以排除大于2的偶数,可以得到下边的程序:

程序代码ver2:(绿色部分)

/*30-5-2017*/

/*计算1000以内的质数(第2版)*/

#include

int main()

{

inti,no;

int counter=0;

no=2;

printf("%d\n",no++); /*2是偶数中唯一的质数,先打印出来*/

for (;no<=1000;no+=2) /*只把奇数作为判断对象,排除大于2的偶数*/

{

for (i=2;i

{

if (no%i==0) /*能被整除的不是质数*/

break;

}

if (no==i) /*直到最后未被整除*/

printf("%d\n",no);

}

printf("乘除运算的次数:%d\n",counter);

return 0;

}

运算结果:

*可以看到乘除运算的次数减少了大约1000次。

质数计算程序(第3版)

大于等于3的质数都无法被大于2的那些偶数整除(4、6、8、……),t通俗的讲,例如要判断13是否为质数,不需要判断他是否被2、3、4、5、6、7、8、9、10、11、12这11个数整除,因为奇数肯定无法被偶数整除。所以有以下程序:

程序代码ver3:(绿色部分)

/*30-5-2017*/

/*计算1000以内的质数(第三版)*/

#include

{

inti,no;

intcouner=0;

no=2;

printf("%d\n",no++);

for (;no<=1000;no+=2) /*明确1000以内大于2的所有偶数不肯是质数*/

{

for (i=3;i

couner++;

if (no%i==0)

break;

}

if (no==i)

printf("%d\n",no);

}

printf("the value of counter is:%d\n",couner);

return 0;

}

运算结果:

*我们看到乘除的次数只有38678次。

质数计算程序(第4版)

在第三步的基础上,我们发现以下规律:

不能被3整除的整数也无法被大于3的那些3的倍数(6、9、……)整除不能被5整除的整数也无法被大于5的那些5的倍数(10、15、……)整除程序代码ver4:(绿色部分)

/*30-5-2017*/

/*计算1000以内的质数(第四版)*/

#include

int main()

{

inti,no;

int prime[500];

intpt=0;

int counter=0;

prime[pt++]=2;

prime[pt++]=3;

for (no=5;no<=1000;no+=2)

{

for (i=1;i

{

counter++;

if (no%prime[i]==0)

break;

}

if (pt==i)

prime[pt++]=no;

}

相关主题
相关文档
最新文档