C语言素数的几种判断方法

合集下载

c语言判断范围内素数

c语言判断范围内素数

c语言判断范围内素数以下是一个简单的 C 语言程序,用于判断一个范围内的素数(质数):#include <stdio.h>#include <stdbool.h>// 判断是否为素数的函数bool isPrime(int num) {if (num <= 1) {return false;}for (int i = 2; i * i <= num; i++) {if (num % i == 0) {return false;}}return true;}// 输出范围内的素数void printPrimesInRange(int start, int end) {printf("Prime numbers in the range [%d, %d]:\n", start, end);for (int i = start; i <= end; i++) {if (isPrime(i)) {printf("%d ", i);}}printf("\n");}int main() {int start, end;// 输入范围printf("Enter the range (start end): ");scanf("%d %d", &start, &end);// 判断并输出范围内的素数printPrimesInRange(start, end);return 0;}这个程序中:isPrime 函数用于判断一个数是否为素数。

printPrimesInRange 函数用于输出指定范围内的所有素数。

在 main 函数中,用户被要求输入范围的起始值和结束值,然后程序调用 printPrimesInRange 函数来输出范围内的素数。

请注意,这只是一个简单的示例程序,可能并不是最优化或最高效的实现方式。

c语言素数个数求法

c语言素数个数求法

c语言素数个数求法素数,即质数,是指除了1和本身以外没有其他因数的自然数。

素数在数学上有着重要的地位和应用,如RSA公钥加密算法、密码学等。

本文将介绍如何使用c语言求出指定范围内的素数个数。

我们需要了解一个判断素数的基本方法,那就是试除法。

试除法是指用2到sqrt(n)之间的所有整数去除n,如果都不能整除,则n是素数。

因为如果n有一个大于1小于n的因数a,则必然有一个大于1小于等于sqrt(n)的因数b,使得a*b=n。

所以只需要判断2到sqrt(n)之间的数是否能整除n即可。

接下来,我们使用c语言实现求素数的算法。

首先,定义一个函数isPrime,判断一个数是否为素数。

代码如下:```cint isPrime(int n){if(n<=1) return 0; //1不是素数for(int i=2;i*i<=n;i++){if(n%i==0) return 0; //能整除说明不是素数}return 1; //是素数}```上述代码使用了试除法判断一个数是否为素数,时间复杂度为O(sqrt(n))。

接下来,我们定义一个函数countPrimes,用于统计指定范围内素数的个数。

代码如下:```cint countPrimes(int n){int count=0;for(int i=2;i<n;i++){if(isPrime(i)) count++; //如果是素数,计数器加1}return count;}```上述代码使用了isPrime函数判断每个数是否为素数,时间复杂度为O(n*sqrt(n))。

可以看出,这个算法并不是非常高效,当n很大时,计算时间会非常长。

可以采用一些优化方法来提高效率,如埃拉托色尼筛法、欧拉筛法等。

埃拉托色尼筛法是一种简单的素数筛法,其基本思想是从2开始,将每个素数的倍数都标记成合数,直到不能再标记为止。

代码如下:```cint countPrimes(int n){int count=0;int* isPrime=(int*)malloc(sizeof(int)*n);memset(isPrime,1,sizeof(int)*n);for(int i=2;i<n;i++){if(isPrime[i]){count++; //如果是素数,计数器加1for(int j=2*i;j<n;j+=i){isPrime[j]=0; //将i的倍数标记为合数}}}free(isPrime);return count;}```上述代码使用了动态分配内存的方式,将素数标记数组isPrime初始化为1,表示都是素数。

判断素数c语言代码

判断素数c语言代码

判断素数c语言代码
素数是大于1的自然数,且只能被1和它本身整除的,即1和它本身以外不再有其他因数的自然数。

在c语言中,实现判断素数的代码如下:
#include <stdio.h>
int main()
{
int n, i;
bool isPrime = true;
printf("请输入要检验是否为素数的正整数:");
scanf("%d", &n);
for(i = 2; i <= n / 2; ++i)
{
// 如果在2到n/2之间发现因子,则n不是素数
if(n % i == 0)
{
isPrime = false;
break;
}
}
if (isPrime)
printf("%d 是素数", n);
else
printf("%d 不是素数", n);
return 0;
}
上面的代码以正整数n为要判断的数,若其能被2到n/2之间的任何数整除,则该数不是素数,只有当n可以整除的因数不再有其他的时候,该数就为素数。

整个判断的过程中,采用的是一直循环的方法,从2到n/2,每步进行一次整除的操作,若整除的话,就直接跳出循环,反之,一直循环到最后才跳出,根据反证法就可以判定数字是否是素数。

C语言素数的几种判断方法精编版

C语言素数的几种判断方法精编版

C语言素数的几种判断方法精编版
我们要判断素数,首先要知道素数的定义。

素数:质数又称素数。

一个大于1的自然数,除了1和它
自身外,不能被其他自然数整除的数叫做质数;否则称为
合数。

知道了素数的定义,那么我们应该想一下,如何去判断一个数是否为素数?
一种思路是,我们在每次得到一个数后,都去计算,去尝
试因式分解它,看它除了1和自身之外还有没有其他因子
另一种是,我们去查阅素数表,看这个数在不在素数表上。

那我们就要先得到素数表。

以下除了第一种方法,第2~4种方法都是用第二种思路做的当要判断的目标数很少时,第一种高效。

但是当给定的目标数组很多,数也很大时。

后面的思路配上高效的查找算法,显然更高效
方法:暴力求解
1-1:稍微动动脑
思想:根据素数的定义思考。

素数是大于1的自然数,除了1和自身外,其他数都不是它的因子。

那我们就可以用一个循环,从2开始遍历到这个数减去1,如果这个数都不能被整除,那么这个数就是素
数。

也就是说:给定一个数 n , i 从 2 开始取值,直到 n - 1(取整数),如果 n % i != 0 , n 就是素数进一步思考,有必要遍历到 n - 1 吗?除了1以外,任何合数最小的因子就是2,那最大的因子就是 n/2 那我们就遍历到 n/2就足够了。

c语言回文素数的判断

c语言回文素数的判断

c语言回文素数的判断1. 什么是回文素数?回文素数是指既是回文数又是素数的自然数。

回文数是指一个数从左往右读与从右往左读相同的数,比如131、1221、12321等。

素数是指只能被1和自身整除的自然数,比如2、3、5、7、11等。

2. 为什么要判断回文素数?回文素数在数学上是一个非常有趣的概念,它既具有回文数的特点,又具有素数的特点。

判断回文素数不仅可以提高我们对数学的认识,还能在编程中发挥重要作用,比如在密码学领域、信息安全领域等。

3. 怎样判断回文素数?判断回文素数需要进行两个步骤:首先判断该数是否是回文数,然后再判断该数是否是素数。

判断回文数判断回文数的方法有多种,下面介绍两种:方法一:用字符串这个方法是将整数转换为字符串,然后判断字符串的首尾字符是否相等,依次向中间遍历。

示例代码:```cinclude <stdio.h>include <string.h>int isPalindrome(int n) {char str[20];sprintf(str, "%d", n); // 将整数转换为字符串int len = strlen(str);for (int i = 0; i < len / 2; i++) {if (str[i] != str[len - i - 1]) {return 0; // 不是回文数}}return 1; // 是回文数}```方法二:用数字这个方法是通过计算整数的各位数和对比首尾数,依次向中间遍历。

示例代码:```cint isPalindrome(int n) {if (n < 0 || (n != 0 && n % 10 == 0)) {return 0; // 负数或末尾为0的数都不是回文数}int sum = 0;while (n > sum) {sum = sum * 10 + n % 10;n /= 10;}return n == sum || n == sum / 10; // 判断首位是否相等}```判断素数判断素数的方法也有多种,下面介绍两种:这个方法是从2到n-1枚举所有自然数,看是否能整除n。

判断素数的c语言

判断素数的c语言

判断素数的c语言判断素数的C语言程序素数是指只能被1和本身整除的自然数。

在C语言中,我们可以使用以下方法来判断一个数是否为素数。

方法一:暴力枚举暴力枚举是最简单的方法,即对于每个要判断的数字n,从2到n-1依次判断是否能被整除。

如果存在一个可以整除n的数字,则n不是素数;否则n为素数。

代码实现如下:```c#include <stdio.h>int main(){int n, i, flag = 0;printf("请输入一个正整数:");scanf("%d", &n);for(i=2; i<n; i++){if(n%i == 0){flag = 1;break;}}if(flag == 0)printf("%d是素数\n", n);elseprintf("%d不是素数\n", n);return 0;}```这种方法简单易懂,但效率较低。

当要判断的数字较大时,时间复杂度会非常高。

方法二:优化枚举优化枚举可以减少循环次数,从而提高效率。

具体方法是对于每个要判断的数字n,只需要从2到sqrt(n)依次判断是否能被整除即可。

代码实现如下:```c#include <stdio.h>#include <math.h>int main(){int n, i, flag = 0;printf("请输入一个正整数:");scanf("%d", &n);for(i=2; i<=sqrt(n); i++){if(n%i == 0){flag = 1;break;}}if(flag == 0)printf("%d是素数\n", n);elseprintf("%d不是素数\n", n);return 0;}```这种方法可以减少循环次数,但仍然存在效率较低的问题。

c语言判断素数标准库

c语言判断素数标准库

c语言判断素数标准库C语言中使用标准库判断素数的方法在C语言中,判断一个数是否为素数是一个常见的任务。

素数是指在大于1的自然数中,除了1和它本身之外不再有其他因数的数。

本文将介绍如何使用C语言的标准库函数来判断一个数是否为素数,并解释其中的原理。

1. 判断素数的基本思想一个数是否为素数可以通过检查它是否有除了1和它本身以外的因数来确定。

如果一个数n除了1和n之外没有其他因数,那么它就是素数。

在判断素数的过程中,最简单的方法是检查它是否能被2到sqrt(n)之间的任何数整除。

2. 标准库中的数学函数在C语言中,用于数学计算的标准库是<math.h>,而判断素数需要使用其中的一些函数。

2.1 sqrt函数sqrt函数用于计算一个数的平方根。

其函数原型如下:double sqrt(double x);2.2 使用sqrt函数判断素数通过计算一个数的平方根,我们可以避免检查所有可能的因数,只需检查2到sqrt(n)之间的因数即可。

3. 判断素数的C程序下面是一个简单的C程序,用于判断一个数是否为素数:#include <stdio.h>#include <math.h>// 判断素数的函数int isPrime(int num){if(num <=1){return0;// 小于等于1的数不是素数}int maxDivisor =(int)sqrt(num);// 计算num的平方根for(int i =2;i <=maxDivisor;++i){if(num %i ==0){return0;// 如果有因数,不是素数}}return1;// 没有因数,是素数}int main(){int num;// 输入待判断的数printf("请输入一个整数:");scanf("%d",&num);// 调用判断素数的函数if(isPrime(num)){printf("%d是素数。

【C语言】经典——判断100以内的素数

【C语言】经典——判断100以内的素数

【C语⾔】经典——判断100以内的素数
/*将100以内的素数⽤数组保存起来,再将数组⾥的值打印出来*/
#include <stdio.h>
int Pd_Ss(int i);
int main(){
int a[100] = {0}; //⽤于存储素数
int i = 0,k = 0; //⽤于循环的计数
printf("100以内的素数有:\r\n");
for(i = 2; i<=100 ;i++){ //判断2-100的所有数
if(Pd_Ss(i) == 1){ //调⽤函数判断如果函数返回1,则将i的值录⼊数组
a[k++]=i; //将素数存⼊数组
}
}
for(i = 0; i<k; i++){
printf("a[%d]=%d\r\n",i,a[i]); //输出素数
}
printf("\r\n"); //换⾏
return0;
}
int Pd_Ss(int i){ //判断素数的函数
int j;
for(j = 2;j * j <= i ; j++){
if(i % j == 0){ //如果取余为0,则返回0(退出函数)
return0;
}
}
return1; //返回1
}
备注:该程序代码⽐较基础,所有程序中的变量名⽐较随意
判断素数的函数(Pd_Ss)的思路:利⽤循环,判断 i 的值与 j 的平⽅,当 j 平⽅⼩于 i 时,进⼊循环,判断此时的 i 能否整除 j,如果能整除,说明 i 不是素数,返回0退出函数,否则返回 1;。

c语言调用函数判断素数

c语言调用函数判断素数

c语言调用函数判断素数素数是指除了1和本身以外,无法被其他数整除的正整数。

在编程中,确定一个数是否为素数是常见的需求。

C语言中,我们可以自定义一个函数来实现判断素数的功能。

首先,我们需要明确一下素数的相关特征。

根据定义,一个数如果能够被另一个数整除,那么这个数的因子必然介于1和它本身之间。

因此,我们可以通过遍历所有可能的因子,来判断一个数是否为素数。

在C语言中,我们可以定义一个判断素数的函数,例如:```cint isPrime(int n){int i;for(i=2; i<n; i++){if(n%i == 0){return 0; // 不是素数,返回0}}return 1; // 是素数,返回1}```该函数接受一个整数n作为参数,遍历所有可能的因子,如果找到了能够整除n的因子,则说明n不是素数,返回0;反之,说明n是素数,返回1。

接下来,我们可以在 main 函数中调用该函数,用以验证其正确性:```cinclude <stdio.h>int isPrime(int n);int main(){int num;printf("请输入一个整数:");scanf("%d", &num);if(isPrime(num)){printf("%d是素数。

\n", num);} else {printf("%d不是素数。

\n", num);}return 0;}int isPrime(int n){...}```在运行程序时,我们首先会提示用户输入一个整数,随后调用`isPrime` 函数,根据其返回值输出相应的结果。

需要注意的是,素数判断的范围应该是从2开始到该数减1为止,因为一个数除以自身必为1,并不会影响结果。

此外,为了提高计算效率,我们还可以将循环的终止条件改为 $\sqrt{n}$。

c语言中判断素数的方法

c语言中判断素数的方法

c语言中判断素数的方法1. 嘿,你知道吗?在 C 语言里可以用循环来判断素数呢!就像警察一个个排查嫌疑人一样。

比如你要判断 7 是不是素数,就从 2 到 6 依次检查能不能整除它。

哎呀,多有趣呀!2. 哇哦,还可以通过判断一个数只有 1 和它本身能整除来确定它是素数哦!这就好像找朋友,只有那一个特别的和它自己才是它的真朋友。

比如11,除了 1 和 11 就没别的朋友能整除它啦,这不就是素数嘛!3. 嘿呀,你有没有想过用平方根的方法来判断素数呀?这可厉害了,就像抄近道一样。

比如要判断25,只需要检查到5 就行了,不用再往后找啦,多省事儿!4. 呀,还能根据素数的特性来写代码判断呢!这就好比是识别一个人的独特标志一样。

就像 13,有了这些特性就能确定它是素数,多神奇!5. 哇塞,其实可以写一个很巧妙的算法来专门判断素数哟!就如同有一双锐利的眼睛能一眼看穿是不是素数。

比如说 17,算法一上,马上就知道它是素数啦!6. 哈哈,你能想到用函数来封装判断素数的过程吗?这就好像把宝藏装在一个盒子里。

然后你想用的时候就拿出来,多方便呀!就像判断 19 是不是素数,用这个函数轻松搞定!7. 哎呀呀,还有一种特别的思路来判断素数呢!就像是找到了一条秘密通道。

比如对某个数进行各种测试,最后确定它是素数,是不是很有意思?8. 咦,你知道吗?通过一些巧妙的条件判断也能知道是不是素数呢!就像一道谜题,解开了就知道答案啦。

试试判断 23 是不是,你就明白啦!9. 好啦,其实判断素数的方法有好多好多呢,每一种都有它的奇妙之处!我觉得啊,这些方法真的让编程变得超级有趣,让我们能发现数字世界里的各种秘密!。

C语言——判断一个数是否为质数素数

C语言——判断一个数是否为质数素数

C语⾔——判断⼀个数是否为质数素数定义:约数只有1和本⾝的整数称为质数,或称素数。

计算机或者相关专业,基本上⼤⼀新⽣开始学编程都会接触的⼀个问题就是判断质数,下⾯分享⼏个判断⽅法,从普通到⾼效。

1)直观判断法最直观的⽅法,根据定义,因为质数除了1和本⾝之外没有其他约数,所以判断n是否为质数,根据定义直接判断从2到n-1是否存在n的约数即可。

C++代码如下:bool isPrime_1( int num ){int tmp =num- 1;for(int i= 2;i <=tmp; i++)if(num %i== 0)return 0 ;return 1 ;}2)直观判断法改进上述判断⽅法,明显存在效率极低的问题。

对于每个数n,其实并不需要从2判断到n-1,我们知道,⼀个数若可以进⾏因数分解,那么分解时得到的两个数⼀定是⼀个⼩于等于sqrt(n),⼀个⼤于等于sqrt(n),据此,上述代码中并不需要遍历到n-1,遍历到sqrt(n)即可,因为若sqrt(n)左侧找不到约数,那么右侧也⼀定找不到约数。

C++代码如下:1. bool isPrime_2( int num )2. {3. int tmp =sqrt( num);4. for(int i= 2;i <=tmp; i++)5. if(num %i== 0)6. return 0 ;7. return 1 ;8. }3)另⼀种⽅法⽅法(2)应该是最常见的判断算法了,时间复杂度O(sqrt(n)),速度上⽐⽅法(1)的O(n)快得多。

最近在⽹上偶然看到另⼀种更⾼效的⽅法,暂且称为⽅法(3)吧,由于找不到原始的出处,这⾥就不贴出链接了,如果有原创者看到,烦请联系我,必定补上版权引⽤。

下⾯讲⼀下这种更快速的判断⽅法;⾸先看⼀个关于质数分布的规律:⼤于等于5的质数⼀定和6的倍数相邻。

例如5和7,11和13,17和19等等;证明:令x≥1,将⼤于等于5的⾃然数表⽰如下:······ 6x-1,6x,6x+1,6x+2,6x+3,6x+4,6x+5,6(x+1),6(x+1)+1 ······可以看到,不在6的倍数两侧,即6x两侧的数为6x+2,6x+3,6x+4,由于2(3x+1),3(2x+1),2(3x+2),所以它们⼀定不是素数,再除去6x本⾝,显然,素数要出现只可能出现在6x的相邻两侧。

最大素数c语言

最大素数c语言

最大素数的求解1. 什么是素数?素数是指只能被1和自身整除的正整数。

在数学中,素数也被称为质数。

素数是数字领域中的基本概念,对于很多数论问题都起到了至关重要的作用。

2. 如何判断一个数是否为素数?判断一个数是否为素数有多种方法,下面介绍两种常用的判断素数的方法。

2.1 蛮力法蛮力法是一种最简单直接的判断素数的方法,其基本思想是对待判断的数从2开始,逐个除以所有小于它的自然数,如果能被除尽,则该数不是素数;如果不能被除尽,则该数是素数。

蛮力法的C语言代码如下:#include <stdio.h>int isPrime(int num) {if (num < 2) {return 0;}for (int i = 2; i * i <= num; i++) {if (num % i == 0) {return 0;}}return 1;}int main() {int n;printf("请输入一个正整数: ");scanf("%d", &n);if (isPrime(n)) {printf("%d是素数\n", n);} else {printf("%d不是素数\n", n);}return 0;}2.2 埃氏筛法埃氏筛法是一种更高效的判断素数的方法,其基本思想是从2开始,将每个素数的倍数标记为合数,直到遍历完所有小于等于待判断数的自然数,剩下的未被标记的数即为素数。

埃氏筛法的C语言代码如下:#include <stdio.h>#include <stdbool.h>void sieveOfEratosthenes(int n) {bool isPrime[n+1];for (int i = 2; i <= n; i++) {isPrime[i] = true;}for (int i = 2; i * i <= n; i++) {if (isPrime[i]) {for (int j = i * i; j <= n; j += i) {isPrime[j] = false;}}}printf("小于等于%d的素数有: ", n);for (int i = 2; i <= n; i++) {if (isPrime[i]) {printf("%d ", i);}}printf("\n");}int main() {int n;printf("请输入一个正整数: ");scanf("%d", &n);sieveOfEratosthenes(n);return 0;}3. 求解最大素数有了判断素数的方法,我们可以通过遍历一定范围内的数,找到其中的最大素数。

C语言判断素数

C语言判断素数

注意,这个示例中的判断素数的算法是一种简单但有效的方法,但对于大数可能不够高效。 如果需要处理大数的素数判断,可以考虑使用更高级的算法,如 Miller-Rabin 算法或 AKS 素数测试算法。
}
rHale Waihona Puke turn 1; // 是素数 }int main() { int num; printf("请输入一个正整数: "); scanf("%d", &num);
if (isPrime(num)) { printf("%d 是素数\n", num);
} else { printf("%d 不是素数\n", num);
判断一个数是否为素数是一个常见的数学问题。素数是指只能被 1 和自身整除的正整数。下 面是一个使用 C 语言判断素数的示例:
c 复制代码
#include <stdio.h>
int isPrime(int num) { if (num <= 1) { return 0; // 不是素数 }
for (int i = 2; i * i <= num; i++) { if (num % i == 0) { return 0; // 不是素数 }
}
return 0; }
在这个示例中,我们定义了一个函数 isPrime 来判断一个数是否为素数。首先,我们判断 如果数小于等于 1,则不是素数。然后,我们使用一个循环从 2 开始,逐个判断是否能整除 该数。如果能整除,则不是素数。循环的终止条件是 i 的平方大于等于该数,这是因为如果 存在大于 i 的因子,那么必然存在小于等于 i 的因子。最后,如果循环结束仍未找到能整除 的因子,则该数是素数。 在 main 函数中,我们从用户输入中获取一个正整数,并调用 isPrime 函数来判断是否为素 数,然后输出结果。

c语言编写程序判断素数while

c语言编写程序判断素数while

什么是素数?素数指的是只能被1和自身整除的自然数,也就是说除了1和它本身之外,不能被其他自然数整除的数。

比如2、3、5、7等就是素数,因为它们只能被1和自身整除,而4、6、8等就不是素数,因为它们还可以被其他自然数整除。

为什么要用C语言编写程序来判断素数?C语言是一种强大的编程语言,它能够很好地帮助我们实现各种功能。

用C语言编写程序来判断素数,不仅可以加深对C语言的理解,还可以提高对素数的认识,并且可以应用到实际生活中,帮助我们解决一些实际问题。

如何使用C语言编写程序来判断素数?下面我将介绍一种使用C语言编写程序来判断素数的方法。

我们需要使用C语言中的while循环来进行判断。

具体步骤如下:1. 我们需要定义一个函数来判断一个数是否为素数。

我们可以将这个函数命名为isPrime,函数的参数为一个整数n,表示要判断的数。

2. 在isPrime函数中,我们可以使用while循环来进行判断。

我们可以设定一个变量i,初始值为2,然后每次循环时i增加1,直到i大于n为止。

在每次循环中,我们可以使用if语句来判断n能否被i整除,如果能被整除,则说明n不是素数,可以结束程序;如果不能被整除,则继续循环,直到i大于n为止。

3. 如果循环结束后,都没有找到能整除n的数,那么说明n是素数,可以输出“n是素数”的提示信息。

具体代码如下:```#include <stdio.h>int isPrime(int n) {int i = 2;while (i < n) {if (n i == 0) {return 0; // 不是素数}i++;}return 1; // 是素数}int m本人n() {int num;printf("请输入一个整数:");scanf("d", num);if (isPrime(num)) {printf("d是素数\n", num);} else {printf("d不是素数\n", num);}return 0;}```以上就是使用C语言编写程序来判断素数的方法。

素数判断c语言

素数判断c语言

素数判断c语言什么是素数?素数又叫质数,指在大于1的自然数中,除了1和本身,不能被其他自然数整除的数。

例如:2、3、5、7、11、13、17、19等都是素数。

素数判断的方法对于一个数n,如果想要判断它是否为素数,常见的方法有以下几种:1.暴力枚举法只需要从2到n-1枚举每一个数,如果n能被其中的一个数整除则说明n不是素数。

这种方法的时间复杂度为O(n)。

2.枚举到根号n因为n如果有一个大于根号n的因子,必然有一个小于根号n的因子,所以只需要枚举到根号n即可。

3.筛法筛法是一种更加高效的素数判断方法,它可以在O(nloglogn)的时间内得到小于等于n的所有素数。

具体流程:1)先将2到n的数列打上标记,都为素数;2)从2开始,将素数的倍数打上合数的标记,比如4、6、8、10…都为合数,清除2的所有倍数3)下一个未被打上标记的数是素数4)重复第二步,直到整个数列都被处理过代码实现下面是一段C语言代码,用于判断一个数是否为素数:#include <stdio.h>int isPrime(int n){int i;if(n<2) return 0; //小于2不是素数for(i=2;i*i<=n;i++) //i的平方大于n就没必要再执行下去了,提高效率{if(n%i==0) return 0;}return 1;}int main(){int n;scanf("%d",&n);if(isPrime(n)) printf("%d是素数\n",n);else printf("%d不是素数\n",n);return 0;}可以看到,代码非常简单易懂,只要判断n是否小于2,然后从2开始枚举每个数,看能否被n整除即可。

代码优化上面的代码虽然可以判断素数,但是效率并不高,当n很大时,运行速度会非常慢。

下面,我们来优化代码:1)只需要循环到sqrt(n)即可。

C语言判断一个数是否是素数

C语言判断一个数是否是素数

C语言判断一个数是否是素数/cpp/html/2547.html2015素数又称质数。

所谓素数是指除了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)的代码:1.#include <stdio.h>2.3.int main(){4.int a=0; // 素数的个数5.int num=0; // 输入的整数6.7.printf("输入一个整数:");8.scanf("%d",&num);9.10.for(int i=2;i<num;i++){11.if(num%i==0){12.a++; // 素数个数加113.}14.}15.16.if(a==0){17.printf("%d是素数。

\n", num);18.}else{19.printf("%d不是素数。

\n", num);20.}21.22.return 0;23.}思路2)的代码:1.#include <stdio.h>2.#include <math.h>3.void main(){4.int m; // 输入的整数5.int i; // 循环次数6.int k; // m 的平方根7.8.printf("输入一个整数:");9.scanf("%d",&m);10.11.// 求平方根,注意sqrt()的参数为 double 类型,这里要强制转换m的类型12.k=(int)sqrt( (double)m );13.for(i=2;i<=k;i++)14.if(m%i==0)15.break;16.17.// 如果完成所有循环,那么m为素数18.// 注意最后一次循环,会执行i++,此时i=k+1,所以有i>k19.if(i>k)20.printf("%d是素数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include<stdio.h>
#include<math.h>
main()
{
int i,n;
printf("请输入一个数:");
scanf("%d",&n);
for(i=2;i<n;i++)
if(n%i==0)
break;
if(i>=n)
printf("素数!");
printf("\n");
}
/*main()
{
int i,n,m;
printf("请输入一个整数:");
scanf("%d",&m);
n=(int)sqrt(m);
for(i=2;i<=n;i++)
if(m%i==0)
break;
if(i>n)
printf("素数!\n");
else
printf("不是素数!"); }*/
/*int p(int m)
{
int i,n=sqrt(m);
for(i=2;i<=n;i++)
if(m%i==0)
break;
if(i>n)
return 1;
else
return 0;
}
main()
{
int m;
for(m=1;m<=10;m++)
{
if(p(m))
printf("%d ",m);
}
printf("\n");
}*/
//3-100间所素数。

/*main()
{
int i,n;
for(n=3;n<=100;n++)
{
for(i=2;i<=n-1;i=i+1)
if(n%i==0)
break;
if(i>=n)
printf("%d\t",n);
}
}*/
/*main()
{
int i,m,j;
for(i=2;i<=10;i++)
{
m=sqrt(i);
for(j=2;j<=m;j++)
{
if(j%m==0)
break;
if (j>m) //加上这句,如果检查所有的j全部不能整除m,循环结束后,j一定大于m,这时的i才是素数
printf("%d",i);
}
}
}
/*
void main()
{
int i,j,n=0,xx[10];
for(i=1;i<10;i++)
{
for(j=2;j<i;j++)
if(i%j==0)
break;
if(j>=i) //保证i以下的每个数都不能被i整除
xx[n++]=i;
}
printf("1到10以内的所有素数如下\n");
for(i=0;i<n;i++)
printf(" %d ",xx[i]);
printf("\n 共有n=%d个素数\n",n);
}
*/。

相关文档
最新文档