/*
输出1000内的质数(素数:只能被1和自身整除的数)
*/
题目:
输出1000内的质数(素数:只能被1和自身整除的数)
实现思路:
- 明确问题:
- 确定要解决的问题:在这个例子中,问题是找出小于1000的所有质数。
- 理解质数的定义:一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫作质数。
- 设计算法:
- 选择一个合适的算法来解决问题。对于找出一定范围内的质数,常用的方法有试除法、筛法等。
- 在这个例子中,可以使用试除法,即对于每个数,从2开始试除,直到该数的平方根(包含)。
- 编写代码框架:
- 编写程序的基本结构,包括头文件、主函数等。
- 初始化必要的变量,如范围的上限、当前检查的数、除数等。
- 实现算法逻辑:
- 使用循环结构遍历范围内的每个数。
- 对于每个数,使用另一个循环来试除,从2开始,直到该数的平方根(因为如果一个数不是质数,它必有一个不大于它平方根的因数)。
- 如果在试除过程中找到了能整除的数,则该数不是质数,跳出内层循环。
- 如果试除结束都没有找到能整除的数,则该数是质数,进行打印或记录。
代码:
#include <stdio.h>
int main() {
int i, j, k;
// 外层循环,i从2开始递增到999(因为1000不包含在内)
for (i = 2; i < 1000; i++) {
// 初始化k为0,用于标记i是否为质数
k = 0;
// 内层循环,j从2开始递增到i-1
for (j = 2; j < i; j++) {
// 检查i是否能被j整除
if (i % j == 0) {
// 如果能整除,说明i不是质数,将k设置为1
k = 1;
// 跳出内层循环,无需继续检查
break;
}
}
// 检查k的值,如果k为0,说明i是质数
if (!k) {
// 打印质数i,格式化输出宽度为4,右对齐
printf("%4d ", i);
}
}
return 0; // main函数返回0,表示程序成功执行
}
解读:
初始化变量
i
、j
、k
。外层循环:
for (i = 2; i < 1000; i++)
,遍历从2到999的所有整数(因为1000不包含在内)。在每次外层循环的开始处,将
k
初始化为0,准备检查当前的i
是否为质数。内层循环:
for (j = 2; j < i; j++)
,对于每个i
,检查从2到i-1
的所有整数j
。在内层循环中,如果
i
能被j
整除(即i % j == 0
),则将k
设置为1,并使用break
语句跳出内层循环。因为此时已经确定i
不是质数,无需继续检查。内层循环结束后,检查
k
的值。如果k
仍然是0,说明i
不能被2到i-1
之间的任何整数整除,因此i
是一个质数。此时,使用printf
函数打印出i
。当外层循环结束后,所有小于1000的质数都已打印出来。
return 0;
表示程序执行成功。