1. 题目要求
寻找出100以内的所有质数(素数)。
2. 数学中如何判断是否为质数(素数)
首先,我们要清楚,什么是质数,或者说素数,下文我就直接叫质数了。
质数的定义: 质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
3. 实现思路
首先,大家可以寻找一下质数与非质数的区别,以及质数的定义和特点。
3.1 思路一
这个思路是根据质数的定义产生的,即质数在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。换句话说只要出现了不是1和本身的因数 便可认定为不是质数。
3.2 思路二
这个思路是根据质数的特点 产生的,即质数只有两个因数,而非质数有2个以上的质数。换句话说,只要因数的个数大于两个便可认定为不是质数。
4. 代码实现
下面的代码是按照思路一进行编写的代码,大家可以尝试自己做一下思路二。下面!看代码!
#include <stdio.h>
#define TRUE 1
#define FALSE 0
#define MIN_NUM 1
#define MAX_NUM 100
//函数的声明
int is_prime(int num);
void find_prime();
/**
*主函数
*
*/
void main()
{
find_prime();
}
/**
*判断 num 是否为质数
*
*/
int is_prime(int num)
{
int factor = 1; //初始化第一个除数为1
while(factor <= num) //判断除数是否小于被除数
{
if((num % factor) == 0) //判断是否可以整除
{
if(factor != num && factor != 1) //如果除数不为1或者自己本身,则不是质数,返回false
return FALSE;
}
factor++;
}
return TRUE;
}
/**
*寻找1-100之间的所有质数
*
*/
void find_prime()
{
int i = MIN_NUM;
int count = 0; //为了每5个质数输出为1行,定义变量用以记录质数的数量
for( ; i <= MAX_NUM ; i++)
{
if(is_prime(i) == 1) //判断是否为质数
{
printf("%d\t",i); //为了美观,我使每个质数后跟水平制表符
count++;
if(count != 0 && count % 5 ==0) //为了输出美观,我使其每行只输出5个质数
{
printf("\n");
}
}
}
}
5. 运行结果
1 2 3 5 7
11 13 17 19 23
29 31 37 41 43
47 53 59 61 67
71 73 79 83 89
97
Process finished with exit code 0
6. 思考
这个题对刚开始的初学者可能有些难度,需要反复理解,并尝试写出属于自己的代码,但是上文给出的代码仍有很大的改进空间,大家可以在理解后,尝试者对这个质数的判断算法进行改进~ 大家可以尝试以下使用思路二去重新做一下! 欢迎大家留言评论哦~