-
2019-08-17 10:35:45
C语言判断素数的两种方法
素数又称质数。所谓素数是指除了 1 和它本身以外,不能被任何整数整除的数,例如17就是素数,因为它不能被 2~16 的任一整数整除。
思路1):因此判断一个整数m是否是素数,只需把 m 被 2 ~ m-1 之间的每一个整数去除,如果都不能被整除,那么 m 就是一个素数。
思路2):另外判断方法还可以简化。m 不必被 2 ~ m-1 之间的每一个整数去除,只需被 2 ~ 之间的每一个整数去除就可以了。如果 m 不能被 2 ~ 间任一整数整除,m 必定是素数。例如判别 17 是是否为素数,只需使 17 被 2~4 之间的每一个整数去除,由于都不能整除,可以判定 17 是素数。
原因:因为如果 m 能被 2 ~ m-1 之间任一整数整除,其二个因子必定有一个小于或等于 ,另一个大于或等于 。例如 16 能被 2、4、8 整除,16=28,2 小于 4,8 大于 4,16=44,4=√16,因此只需判定在 2~4 之间有无因子即可。
两种思路的代码请看解析。
思路1) 的代码:
#include <stdio.h> int main(){ int a=0; // 素数的个数 int num=0; // 输入的整数 printf("输入一个整数:"); scanf("%d",&num); for(int i=2;i<num;i++){ if(num%i==0){ a++; // 素数个数加1 } } if(a==0){ printf("%d是素数。\n", num); }else{ printf("%d不是素数。\n", num); } return 0; }
思路2) 的代码
#include <stdio.h> #include <math.h> void main(){ int m; // 输入的整数 int i; // 循环次数 int k; // m 的平方根 printf("输入一个整数:"); scanf("%d",&m); // 求平方根,注意sqrt()的参数为 double 类型,这里要强制转换m的类型 k=(int)sqrt( (double)m ); for(i=2;i<=k;i++) if(m%i==0) break; // 如果完成所有循环,那么m为素数 // 注意最后一次循环,会执行i++,此时 i=k+1,所以有i>k if(i>k) printf("%d是素数。\n",m); else printf("%d不是素数。\n",m); return 0; }
更多相关内容 -
C语言判断素数
2012-08-09 15:12:58使用C语言实现判断一个数是否为素数,程序简单好用 -
C语言判断素数的几种方法
2022-02-10 14:27:21C语言判断素数的几种方法素数的定义:只能被常数1或自己整除,不能被其他整数整除的正整数。
1.从2——x-1循环
#include<stdio.h> int main() { int x; int IsPrime = 1; //定义变量IsPrime并赋初值1 即x为素数 scanf_s("%d", &x); for (int i = 2; i < x; i++) { if (x % i == 0) { IsPrime = 0; break; } } if (IsPrime == 0) printf("%d is not a prime number", x); else printf("%d is a prime number", x); return 0; }
测试结果:
23
23 is a prime number需要注意的是定义的变量IsPrime赋初值为1;其次是for循环中i是从2开始增加。另外加一句:break;与continue;的区别在于:程序执行到break;语句时,会跳出当前循环即结束当前循环;而continue;是不再执行当前循环内continue;语句之后的部分。
拓展:利用循环嵌套输出n以内的素数
#include<stdio.h> int main() { int n; int count=0; int i,j; scanf_s("%d",&n); for(i=1;i<=n;i++) { int IsPrime=1; for( j=2;j<n;j++) { if(i%j==0) IsPrime=0; break; } if (IsPrime == 1) { printf("%d\t", i); count++; if (count % 5 == 0) //每5个输出做一行 printf("\n"); } } return 0; }
测试结果:
50
1 3 5 7 9
11 13 15 17 19
21 23 25 27 29
31 33 35 37 39
41 43 45 47 492.除去偶数之后,3——x-1,每次加2
定义一个判断是否为素数的函数
int IsPrime(int x) { int ret=1; //ret含义与之前的变量IsPrime相同 if(x==1||(x!=2&&x%2==0)) ret=0; for(int i=3;i<x;i+=2) { if(x%i==0) { ret=0; break; } } return ret; }
3.通过sqrt()函数
int IsPrime(int x) { int ret=1; //ret含义与之前的变量IsPrime相同 if(x==1||(x!=2&&x%2==0)) ret=0; for(int i=3;i<sqrt(x);i+=2) //循环到sqrt(x) { if(x%i==0) { ret=0; break; } } return ret; } //使用sqrt()函数需要包含头文件<math.h>
4.通过判断是否能被已经判断过的并且<x的素数整除,利用数组
#include<stdio.h> #define N 50 int IsPrime(int x, int known[], int number); int main() { int i = 3; int count = 1; int array[N]={2}; while (count < N) { if (IsPrime(i, array, count)) array[count++] = i; i++; } for (i = 0; i < N; i++) { printf("%d", array[i]); if ((i + 1) % 5 == 0) printf("\n"); else printf("\t"); } return 0; } int IsPrime(int x, int known[], int number) { int ret = 1; int i; for ( i = 0; i < number; i++) { if (x % known[i] == 0) { ret = 0; break; } } return ret; }
测试结果:
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
101 103 107 109 113
127 131 137 139 149
151 157 163 167 173
179 181 191 193 197
199 211 223 227 229以上便是几种判断素数的方法
-
c语言判断素数
2012-10-10 10:16:39这是一个c语言判断素数的问题 我自己也研究了 。 -
C语言判断素数(求素数)
2020-10-30 11:27:24C语言判断素数(求素数) 素数又称质数。所谓素数是指除了 1 和它本身以外,不能被任何整数整除的数,例如17就是素数,因为它不能被 2~16 的任一整数整除。 思路1):因此判断一个整数m是否是素数,只需把 m 被 2 ~ ...C语言判断素数(求素数)
素数又称质数。所谓素数是指除了 1 和它本身以外,不能被任何整数整除的数,例如17就是素数,因为它不能被 2~16 的任一整数整除。
思路1):因此判断一个整数m是否是素数,只需把 m 被 2 ~ m-1 之间的每一个整数去除,如果都不能被整除,那么 m 就是一个素数。
思路2):判断方法还可以简化。m 不必被 2 ~ m-1 之间的每一个整数去除,只需被 2 ~之间的每一个整数去除就可以了。如果 m 不能被 2 ~
间任一整数整除,m 必定是素数。例如判别 17 是是否为素数,只需使 17 被 2~4 之间的每一个整数去除,由于都不能整除,可以判定 17 是素数。
原因:因为如果 m 能被 2 ~ m-1 之间任一整数整除,其二个因子必定有一个小于或等于,另一个大于或等于
。例如 16 能被 2、4、8 整除,16=2*8,2 小于 4,8 大于 4,16=4*4,4=√16,因此只需判定在 2~4 之间有无因子即可。
思路1实现:
#include <stdio.h> int main() { int n; printf("请输入一个1-100之间的整数:\n"); scanf("%d", &n); int m = 0; for (int i = 2; i < n; i++ ) { if(n % i == 0) { m++; } } if (m == 0) { printf("%d是素数\n", n); } else { printf("%d不是素数\n", n); } return 0; }
思路2实现:
#include <stdio.h> #include <math.h> int main() { int n; printf("请输入一个1-100之间的整数:\n"); scanf("%d", &n); int i = 0; int q = sqrt(n); for (i = 2; i <= q; i++ ) { if(n % i == 0) { break; } } if (i > q) { printf("%d是素数\n", n); } else { printf("%d不是素数\n", n); } return 0; }
《C与指针》4.14 - 2:
打印1~100之间所有质数:
#include <stdio.h> int main() { int num, divisor; printf("1, 2"); for (num = 3; num <= 100; num += 2) { for(divisor = 3; divisor < num; divisor +=2 ) { if (num % divisor == 0) { break; } } if(divisor >= num) { printf(", %d", num); } } printf("\n"); return 0; }
结果:
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
-
C语言判断素数(两种方法)
2020-07-07 09:09:23思路1:判断一个数是否为素数,只需把m被2~m-1之间的每一个整数去除,如果都不能被整除,那么m就是一个素数。 思路2:另外判断方法可以简化,m只需被2~√m之间的每一个整数去除就可以了,如果m不能被2-√m之间的每个...素数又称质数,是指除了1和它本身外,不能被其他任何整数整除的数,例如17就是素数,因为它不能被2~16任意整数整除。
思路1:判断一个数是否为素数,只需把m被2~m-1之间的每一个整数去除,如果都不能被整除,那么m就是一个素数。
思路2:另外判断方法可以简化,m只需被2~√m之间的每一个整数去除就可以了,如果m不能被2-√m之间的每个整数去除,m必定是素数。例如判断17是否是素数,只需使17被2-4之间的每个整数去除,由于都不能整除,故17是素数。两种思路的代码如下
思路1的代码:#include<stdio.h> int main() { int a=0;//判断p的因子个数 int p; int i; scanf("%d",&p); for(i=2;i<p;i++) { if(p%i==0) a++; } if(a==0) printf("%d is a prime\n",p); else printf("%d is not a prime\n",p); return 0; }
思路2的代码:
#include<stdio.h> #include<math.h> int main() { int p,i;//p是输入的整数,i是循环次数 int a=0;//因子个数 int m; scanf("%d",&p); m=(int)sqrt(p); for(i=2;i<=m;i++) { if(p%m==0) a++; } if(a==0) printf("%d is a prime\n",p); else printf("%d is not a prime\n",p); return 0; }
思路2也可写成:
#include<stdio.h> #include<math.h> int main() { int p,i; int m; scanf("%d",&p); m=(int)sqrt(p); for(i=2;i<=m;i++) { if(p%m==0) break; } //如果完成所有循环,那么p为素数 if(i>m) printf("%d is a prime\n",p); else printf("%d is not a prime\n",p); return 0; }
测试的数据如下:
-
C语言 判断素数
2021-03-25 23:32:44素数又称质数。所谓素数是指除了 1 和它本身以外,不能被任何 整数整除的数,例如17就是素数,因为它不能被 2~16 的任一整数整除。 #include <stdio.h> void main(){ int a=0,i; // 素数的个数 int num=0; /... -
C语言判断素数算法(附完整源码)
2021-02-26 11:03:04判断素数算法C语言判断素数算法完整源码(定义,实现,main函数测试) C语言判断素数算法完整源码(定义,实现,main函数测试) #include <assert.h> #include <math.h> #include <stdbool.h> #... -
C语言判断素数的三种方法 判断素数(质数)
2022-04-26 23:40:48C语言判断素数的四种方法 判断素数(质数) -
c语言判断素数代码
2018-04-06 23:18:05用算法计算素数一.学习素数之前,先考虑几个最基本的问题:1.什么是素数:2.合数是什么:3.数字中有没有特殊的数字:4.查找素数时素数,都运用了那些算法:二.让我们思考一下:1.素数:除了1和本身外无法被其他... -
c语言判断素数(质数)
2020-12-20 20:31:42一、输入一个正整数并判断它是否为素数 1.素数是指大于1且只能被1和它本身整除的正整数,2是最小素数,素数有无穷个; 2.如果整数x大于2,那么就判断x对2~(x-1)取余是否为0,如果是,肯定不是素数,如果都不是,则... -
使用c语言判断100以内素数的示例(c语言求素数)
2020-09-04 13:16:44主要介绍了使用c语言判断100以内素数的示例(c语言求素数),需要的朋友可以参考下 -
C语言判断素数(求素数)(两种方法).docx
2020-01-08 07:38:17C语言判断素数求素数两种方法 素数又称质数所谓素数是指除了 1 和它本身以外不能被任何整数整除的数例如17就是素数因为它不能被 2~16 的任一整数整除 思路1)因此判断一个整数m是否是素数只需把 m 被 2 ~ m-1 之间的... -
C语言判断素数,判断质素算法
2020-12-04 00:54:531、判断一个数是否为质数 思路:质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。所以从2开始进行求余,在小于自然数本身数字里没有一个数字进行求余数为0的,则证明输入的自然数是质数,否则... -
掌握C语言判断素数(质数)相关内容
2020-05-03 13:59:24例一、已知m是一个大于1的正整数,编程序判断m是否为素数。 编程思路: 1、要判断m是否为素数,只需要检测m是否能被2到m-1之间的整数整除。 2、判断思路(1) 如果m不能被2整除;(例如m=7) m也不能被3整除; 。。... -
C语言判断素数(质数)
2021-05-15 13:28:47这是一个C语言 while 循环的示例:判断一个整数 n(n>1)是否为素数(也成质数)。问题分析输入:一个整数n(n>1)。输出:Yes or No。如果一个整数 n(n>1)不能被 1 或 n 以外的正整数整除,那么 n 就是素数。... -
c语言判断是否素数程序代码
2021-01-01 00:26:58代码如下:#include bool isPrimeNum(int x){ if (x == 1) return false; else if (x <= 0) return false; else if (x == 2) return true; else { for (int i = 2; i < x; i++) { if (x%i == 0) ...