判断质数的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; }