C语言之判断一个数字是否为质数/素数

 时间:2024-10-16 21:01:35

1、 先明白什么是质数/素数素数又称为质数,一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数

C语言之判断一个数字是否为质数/素数

2、 编程实现:判断一个数是否为质数/素数明白了什么是质数/素数后,我们就要思考如何编程实现其核心算法最简单的是遍历法: 即遍历1到其本身,如果除了1和它本身外(2 - n-1),如果每个数都不能被他整除的话,那么就说明这个数是素数int i, n=7, flag = 0;for (i = 2; i < n; i++){if (n % i == 0){flag++;}}if (flag == 0){printf("%d是质数/素数", n);//表示是素数}else{printf("%d不是质数/素数", n);//表示不是素数}

C语言之判断一个数字是否为质数/素数

3、 完整可运行代码#include <stdio.h>int main(){int i, n=7, flag = 0;for (i = 2; i < n; i++){if (n % i == 0){flag++;}}if (flag == 0){printf("%d是质数/素数", n);//表示是素数}else{printf("%d不是质数/素数", n);//表示不是素数}printf("\n");return 0;}

C语言之判断一个数字是否为质数/素数

4、 程序执行结果请输入一个数:55是质数/素数请输入一个数:1515不是质数/素数请输入一个数:1919是质数/素数请输入一个数:2020不是质数/素数

C语言之判断一个数字是否为质数/素数

5、 逻辑优化对一个判读一个数m,上面我们遍历时是直接判断到m-1的,其实判断方法还可以简化。m 不必被 2 ~ m-1 之间的每一个整数去除,只需被 2 ~ sqrt(m) 之间的每一个整数去除就可以了。如果 m 不能被 2 ~ 间任一整数整除,m 必定是素数。例如判别 17 是是否为素数,只需使 17 被 2~4 之间的每一个整数去除,由于都不能整除,可以判定 17 是素数。 原因:因为如果 m 能被 2 ~ m-1 之间任一整数整除,其二个因子必定有一个小于或等于sqrt(m) ,另一个大于或等于sqrt(m) 。例如 16 能被 2、4、8 整除,16=2*8,2 小于 4,8 大于 4,16=4*4,4=sqrt(16),因此只需判定在 2~4 之间有无因子即可。代码调整: #include <math.h> //先引入库文件 for (i = 2; i < n; i++) //然后这里i < n 可以改成i<=sqrt(n)

C语言之判断一个数字是否为质数/素数

6、 优化后的执行结果仍然无误请输入一个数:22是质数/素数请输入一个数:4545不是质数/素数请输入一个数:55是质数/素数请输入一个数:1515不是质数/素数请输入一个数:77是质数/素数请输入一个数:1717是质数/素数请输入一个数:99不是质数/素数

C语言之判断一个数字是否为质数/素数

7、 最后我们扩展下:求101到200之间的素数#include <stdio.h>#include <stdlib.h>#include <string.h>/*判断101到200之间的素数 素数:“素数是指质数,一个大于1的自然数,除了1和它自身外,不能整除其他自然数的数叫做质数;否则称为合数 思路1):因此判断一个整数m是否是素数,只需把 m 被 2 ~ m-1 之间的每一个整数去除,如果都不能被整除,那么 m 就是一个素数。 思路2):另外判断方法还可以简化。m 不必被 2 ~ m-1 之间的每一个整数去除,只需被 2 ~ sqrt(m) 之间的每一个整数去除就可以了。如果 m 不能被 2 ~ 间任一整数整除,m 必定是素数。例如判别 17 是是否为素数,只需使 17 被 2~4 之间的每一个整数去除,由于都不能整除,可以判定 17 是素数。 原因:因为如果 m 能被 2 ~ m-1 之间任一整数整除,其二个因子必定有一个小于或等于sqrt(m) ,另一个大于或等于sqrt(m) 。例如 16 能被 2、4、8 整除,16=2*8,2 小于 4,8 大于 4,16=4*4,4=sqrt(16),因此只需判定在 2~4 之间有无因子即可。 */void main(){int n,i,j,flag=0,sum=0;printf("素数:");for(i=101;i<=200;i++){flag=0;for(j=2;j<i;j++){ //这里j<i可以改成<=sqrt(i)if(i%j==0) {flag=1;}}if(flag==0){sum++; //表示是素数printf("%d,",i);}}printf("\n共有素数%d个\n",sum);}

C语言之判断一个数字是否为质数/素数

8、求101到200之间的素数/质数执行结果素数:101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,共有素数21个

C语言之判断一个数字是否为质数/素数
  • C语言中float是什么意思?
  • 如何用C语言判断是否为素数
  • c语言中 %c表示什么
  • getchar的用法
  • C语言数组从小到大进行排序(冒泡法排序)
  • 热门搜索
    防止溺水手抄报 安全小知识手抄报 儿童端午节手抄报简单 勿忘国耻手抄报内容 楹联手抄报 保护牙齿手抄报 新学期新气象手抄报图片 我与祖国共成长手抄报 班级公约手抄报 传统文化手抄报图片