素数:只能被1和它本身整除的数,也叫质数
素数判断的规则:
1.试除法
例如,我判断13是否为素数,我就要用1-12之间的所有数字被他除一遍,如果都有余数,说明13是素数
我们写代码的时候,要产生2到i-1的数字
//打印100--200之间的素数int main() {int i = 0;for (i = 100; i <= 200; i++) { //这种场景下写<=200就行//判断i是否为素数int j = 0;for (j = 2; j < i; j++) {//j为2到i-1之间的数字,最后一遍循环时,j=iif (i % j == 0) {//如果可以整除说明i不是素数,则跳出循环break;}} //出来这个for循环可能是i不是素数然后break了,也有可能是全都不能整除,i是素数,遍历完了跳出来了if (j == i) { //所以我写这个if是为了来筛选这两种情况,上面j如果加到i的话,说明是素数了printf("%d ", i);}}return 0;}优化2.0:
如果i不是素数,i=a*b,那么a,b中至少有一个数字<=开平方i
开平方要调用数学库函数sqrt(),要引用#include<math.h>
#include <math.h>int main() {int i = 0;for (i = 100; i <= 200; i++) {int j = 0;for (j = 2; j <= sqrt(i); j++) {//在这里用了开平方函数sqrt(i)--表示对i开平方if (i % j == 0)break;}if (j > sqrt(i)) { //修改了这里,上一步for循环里最后一步j加到了sqrt(i)+1的大小printf("%d ", i);}}return 0;}继续优化3.0:
因为偶数绝对不可能是素数,所以我们可以把偶数干掉,就直接把我们的判断效率提高了一倍
#include <math.h>int main() {int i = 0;for (i = 101; i <= 200; i+=2) {//这样只判断101--200之间的奇数就行int j = 0;for (j = 2; j <= sqrt(i); j++) {if (i % j == 0)break;}if (j > sqrt(i)) { printf("%d ", i);}}return 0;}