代码
此代码是用来查找并打印出100到200之间所有素数的实现。代码的逻辑清晰且有效。
#include <stdio.h>
int main()
{
// 素数的条件为只能被1或者它本身整除的
for (int i = 100; i <= 200; i++)
{
int j = 0; // 定义一个整形变量初始值为0来判断i除了它本身能整除之外还有没有其它数可以整除它的
int flag = 1; // 默认当前i是素数
for (j = 2; j <= i - 1; j++) // 初始值设定为2为了循环判断设置它的条件为i-1
{
if (i % j == 0) // 如果它能被当前非本身的数整除那就说明它不是素数
{
flag = 0; // 设置flag的值标记它不是素数
break; // 此时应该跳出循环 因为已经出现了除了1和它本身可以整除它的数
}
}
if (flag == 1) // 进行素数的打印
{
printf("%d数是素数\n", i);
}
}
return 0;
}
说明
-
外层循环 (
for (int i = 100; i <= 200; i++)
):- 这个循环遍历从100到200之间的每个整数
i
,用来判断这些数是否是素数。
- 这个循环遍历从100到200之间的每个整数
-
内层循环 (
for (j = 2; j <= i - 1; j++)
):- 这个循环用于判断当前的
i
是否可以被2到i-1
之间的任意数整除。 - 如果在此范围内找到可以整除
i
的数,i
就不是素数。
- 这个循环用于判断当前的
-
标志变量
flag
:- 初始值为1,假设
i
是素数。 - 如果在内层循环中发现
i
能被j
整除,flag
会被设置为0,并且退出内层循环。 - 如果
flag
仍然为1,则表示i
是素数。
- 初始值为1,假设
优化
但是以上的方法并不高效所以需要改动一下代码
sqrt函数
函数说明
sqrt
是 C 标准库中提供的一个数学函数,用于计算一个数的平方根。它属于 math.h
头文件,需要在代码中包含这个头文件才能使用。
应用sqrt优化
#include <stdio.h>
#include <math.h>
int main()
{
// 素数的条件为只能被1或者它本身整除的
for (int i = 100; i <= 200; i++)
{
int j = 0; // 定义一个整形变量初始值为0来判断i除了它本身能整除之外还有没有其它数可以整除它的
int flag = 1; // 默认当前i是素数
for (j = 2; j <= sqrt(i); j++) // 优化后就可以直接从2开始遍历到开平方i之间这些数字能不能整除i
{
if (i % j == 0) // 如果它能被当前非本身的数整除那就说明它不是素数
{
flag = 0; // 设置flag的值标记它不是素数
break; // 此时应该跳出循环 因为已经出现了除了1和它本身可以整除它的数
}
}
if (flag == 1) // 进行素数的打印
{
printf("%d数是素数\n", i);
}
}
return 0;
}
代码的改进
- 使用
sqrt(i)
:- 使用
sqrt(i)
减少了内层循环的次数,提高了代码执行效率。
- 使用
- 打印结果更简洁:
- 修改了打印输出,确保输出格式与上下文一致。
这个版本的代码功能与原版相同,但运行效率更高,适合查找大范围内的素数。