题目的描述
判断和输出一定范围内所有的素数。
下面拿100~200来举例子
题目的分析
1.首先我们需要100~200的数字,就可以考虑使用循环打印出这些数字。
2.假设要判断一个数a是否为素数,需要拿2~a-1之间的数字去试除a,我们要产生这些数字,也可以用循环。
3.如果2~a-1之间有数字能够整除a,则a不是素数;反之,a是素数。
题目的解法
1.最普通的解法
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a = 0, i = 0;
for (a = 100; a <= 200; a++)
{
int flag = 1;//首先假设a是素数
for (i = 2; i <= a - 1; i++)
{
if (a % i == 0)
{
flag = 0;//a不是素数
break;//有一个后就不用再继续了
}
}
if (flag == 1)
printf("%d ", a);
}
return 0;
}
这个里面多用了一个变量flag来帮忙记住,a是不是素数。
从而达到判断素数的目的,方便了我们的输出。
2.稍微优化的解法
由素数的性质我们可以知道,偶数一定不是素数。
所以我们可以对第一个循环进行修改。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a = 0, i = 0;
for (a = 101; a <= 200; a+=2)//分析可得素数在奇数中产生
{
int flag = 1;//首先假设a是素数
for (i = 2; i <= a - 1; i++)
{
if (a % i == 0)
{
flag = 0;//a不是素数
break;//有一个后就不用再继续了
}
}
if (flag == 1)
printf("%d ", a);
}
return 0;
}
这样计算量就减少了一半,对第一个代码进行简单的优化。
3.使用函数的解法
我们随便选一个不是素数的数字进行分析。
eg: 16 = 2 * 8
=4 * 4
=a * b
我们可以得到在a和b中一定有一个数字是<=√n 的,那么我们就可以使用sqrt( )函数来进行开平方根的操作。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main()
{
int a = 0, i = 0;
for (a = 101; a <= 200; a += 2)
{
int flag = 1;//首先假设a是素数
for (i = 2; i <= sqrt(a); i++)
{
if (a % i == 0)
{
flag = 0;//a不是素数
break;//有一个后就不用再继续了
}
}
if (flag == 1)
printf("%d ", a);
}
return 0;
}
这样就再次优化了代码。
减少了计算量。
以上就是这篇博客的全部内容,如果有错误望各位在评论区指出。
假如有帮助到你的话,请动动小手点个赞吧!