🔥 题目描述
使用C语言写一个程序打印100~200之间的的素数,数字中间使用空格分割。
🔥 解题思路
素数是指只能被1和它本身整除的正整数。我们可以遍历100~200,并找出那些数字是素数。
- 试除法:从
2
到x-1
,逐个尝试是否能整除x
,如果能,x就不是素数,否则x
是素数
优化代码:当 x 为偶数时,x 一定不是素数,因此在遍历时我们可以跳过每个偶数
试除法时间优化:
🔥代码
#include <stdio.h> int main() { int i = 0; for (i = 100; i <= 200; i++) // 遍历100到200之间的每个数 { int flg = 1; // flg用于标记是否为素数,初始假设为素数 int j = 0; for (j = 2; j < i; j++) // 遍历2到i-1之间的每个数 { if (i % j == 0) // 若i能被j整除,则i不是素数 { flg = 0; // 修改flg标记为0,表示i不是素数 break; // 退出内层循环,无需继续判断 } } if (flg != 0) // 若flg为1,表示i是素数 { printf("%d ", i); // 输出素数i } } return 0; } // 优化1 #include <stdio.h> int main() { int i = 0; for (i = 101; i <= 200; i += 2) // 从101开始,每次增加2,遍历101到200之间的每个奇数 { int flg = 1; // flg用于标记是否为素数,初始假设为素数 int j = 0; for (j = 2; j < i; j++) // 遍历2到i-1之间的每个数 { if (i % j == 0) // 若i能被j整除,则i不是素数 { flg = 0; // 修改flg标记为0,表示i不是素数 break; // 退出内层循环,无需继续判断 } } if (flg != 0) // 若flg为1,表示i是素数 { printf("%d ", i); // 输出素数i } } return 0; } // 优化2 #include <stdio.h> #include <math.h> int main() { int i = 0; for (i = 101; i <= 200; i += 2) // 从101开始,每次增加2,遍历101到200之间的每个奇数 { int flg = 1; // flg用于标记是否为素数,初始假设为素数 int j = 0; for (j = 2; j <= sqrt(i); j++) // 遍历2到sqrt(i)之间的每个数 { if (i % j == 0) // 若i能被j整除,则i不是素数 { flg = 0; // 修改flg标记为0,表示i不是素数 break; // 退出内层循环,无需继续判断 } } if (flg != 0) // 若flg为1,表示i是素数 { printf("%d ", i); // 输出素数i } } return 0; }
运行结果: