一、实现要求
编写一个程序,接受一个整数输入,然后显示所有小于或等于该数的素数(质数);
什么是素数?
素数又称质数。简单来说一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数,这个数是大于等于2的整数;否则称为合数(规定1既不是质数也不是合数),例如2、3、5、7、11……
二、算法思路
那么我们知道什么是质数了,操作起来就简单啦,先使用scanf输入一个正整数,然后通过for循环依次找到比input小的数,再去判断他们是否为质数,再实现最后的结果输出。
通过for循环将小于等于input的数依次传入bool zhishu(int num)函数中,此函数是为了判断所传参数是否为质数,故使用返回类型bool即可
质数判断方法:最基本的就是除了1和它自身外,不能被其他自然数整除的数,若被2整除的数肯定也不是质数了,所以我们可以直接从2开始找,这样可以提升一下检索效率。接着依次判断比它小的数中有没有能整除这个数的,可以使用取模的方法,即代码中if(num%j==0),若取模为0证明被整除了,可以直接判断它不是一个质数,若所有都遍历完了,还是没有找到取模为0的,返回true,证明这个数是一个质数。这是大概的思路, 代码中也有详细注释。
三、代码实现
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
// 题目:编写一个程序,接受一个整数输入,然后显示所有小于或等于该数的素数。
bool zhishu(int num)
{
for(int j=2; j<num; j++)
{
if(num%j==0)
{
return false;
break;
}
}
return true;
}
int main()
{
int input;
while(1)
{
printf("请输入一个数字:");
if(scanf("%d", &input)==1); //判断输入是否成功
{
for(int i=2; i<=input; i++) //依次查询小于或等于input的数
{
if(zhishu(i)) //将小于或等于input的数且为质数的数打印出来
{
printf("%d\t", i);
}
}
}
if(getchar()!='\n') //判断输入位正整数
{
printf("请输入一个正整数!!!");
}
printf("\n");
}
return 0;
}
以上是实现一个整数输入,显示输出所有小于或等于该数的素数(质数)的思路,方法比较简单,这里做个小记录与分享,有什么写错的地方,请大佬们多多指教!