*
判断100到200之间的素数
标准:素数就是质数 只能被1和它本身整除。
*/
方法1:
#include"stdio.h"
int main() {
int count = 0;
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是素数\n", i);
count++;
}
}
printf("\n一共有%d个素数\n", count);
return 0;
}
方法2:
#include"stdio.h"
int main() {
int count = 0;
int i = 0;
for (i = 100; i <= 200; i++) {
int flag = 1;
int j = 0;
for (j = 2; j < i; j++) {
if (i % j == 0) {
flag = 0;
break;
}
}
if (flag == 1) {
count++;
printf("%d是素数\n", i);
}
}
printf("\n总共有%d个素数\n", count);
return 0;
}
方法两处优化后的代码 3:
#include"stdio.h"
/*
m = a * b
a和b中至少有一个数是 小于等于 开平方m的
16 = 2*8 16开平方是 4 * 4 其中2是小于4的
只要找到2了就能证明不是素数了 , 不用把整个数都循环一遍
sqrt() 是开平方函数 需要引用math.h头文件
*/
#include"math.h"
int main() {
int count = 0;
int i = 0;
//for (i = 100; i <= 200; i++) { // 还可以每次递进2,把所有的偶数都去除掉, 又节省了一半的时间。
for (i = 101; i <= 200; i+=2) {
int flag = 1;
int j = 0;
//printf("\n=====%lf======\n", sqrt(i)); //12.328828
for (j = 2; j <= sqrt(i); j++) { // 条件是从2到 i的开平方(原来是从2到i) 循环次数上最少可以节省一半。
if (i % j == 0) {
flag = 0;
break;
}
}
if (flag == 1) {
count++;
printf("%d是素数\n", i);
}
}
printf("一共有%d个素数", count);
return 0;
}