在100-200之间,如何实现素数的判断?今天讨论一下。
1. 素数的判断:能被1和它本身整除的数。
2. 代码的功能实现与改进:
【1】
-
- 第一步:先把100-200打印出来,再在里面取判断
- 第二步:判断(2,i-1)之间的数能否被i整除,直到有 i = j 的时候,就打印出结果(因为素数时不能被整除的数字)
- 第三步:如果能被整除,break跳走,因为不符合素数
-
int main() { int i=0 for(i=100;i<=200;i++) { int j=0; for(j=2;j<i;j++) { if(i%j == 0) { break; } } if(i == j) { printf("%d ",i) } } return 0; }
【2】
-
- 在1基础上改进
- 同上,也是先打印出100-200的数,再在里面取判断出素数,复合的打印胡来, 不符合的跳过
- 在循环体内,也是去判断(2,i-1)之间的书去和 i 整除取余数,
- 只不过设置了一个标志,先定义为1
- 当取余数为0的时候(即能被整除,不是素数),就定义为0
- 最后打印输出的知识那些1,而标记为0的数则不被输出。
-
int main() { int i=0 for(i=100;i<=200;i++) { int j=0; int flag=1; for(j=2;j<i;j++) { if(i%j == 0) { flag = 0; break; } } if(flag == 1) { printf("%d ",i) } } return 0; }
【3】
-
- 在2继续改进
- 也同上,知识区别在于,这次在判断素数的时候,不再是从2一词去去数字
- 而是取根号该数字即可,因为:
- 假设m = a * b ,则 a或b <= √m ,也就是说能被根号的都不是素数,否则就是素数
-
#include <math.h> int main() { int i = 0; for (i = 100; i <= 200; i++) { int j = 0;//j表示2到根号i //数 <= 根号i int flag = 1; for (j = 2; j <= sqrt(i); j++) { if (i % j == 0) { flag = 0; break; } } if (flag==1) { printf("%d ", i); } } return 0; }
【4】
-
- 继续改进
- 改进1:因为偶数肯定都不是素数,所以在取100-200的数时,i 的改变量为+2.
- 改进2:加入求数量的变量c.
-
#include <math.h> int main() { int i = 0; int c = 0; for (i = 101; i <= 200; i+=2)//偶数肯定不可以 { //2~sqrt(101)之间的数 int j = 0;//j表示2到i-1的数字 int flag = 1; for (j = 2; j <= sqrt(i); j++) { if (i % j == 0) { flag = 0; break; } } if (flag==1) { c++; printf("%d ", i); } } printf("\n个数:%d\n", c); return 0; }
基于此,素数判断的设计与改进完成。