作者:解学武
C语言判断一个数是否是素数
在数学中,有些数字满足“除了 1 和它本身外,不能被任何整数整除”,这些数字就统称为素数(又称质数)。
例如,数字 17 就是素数,因为它不能被 2~16 的任意一个整数整除。
判断一个数字是否为素数,接下来讲解两种解决方案。
实现代码如下:
因此,第一种实现方案还可以简化,m 不必被 2~m-1 之间的每一个整数去除,只需被 2~sqrt(m) 之间的每一个整数去除就可以了。如果 m 不能被 2~sqrt(m) 间任一整数整除,m 必定是素数。
实现代码如下:
声明:当前文章为本站“玩转C语言和数据结构”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
例如,数字 17 就是素数,因为它不能被 2~16 的任意一个整数整除。
判断一个数字是否为素数,接下来讲解两种解决方案。
实现方案一
判断一个整数 m 是否是素数,只需把 m 和 2 ~ m-1 之间的每一个整数做整除运算,如果都不能被整除,那么 m 就是一个素数。实现代码如下:
#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;
}
运行结果为:
输入一个整数:17
17是素数
实现方案二
如果 m 能被 2~m-1 之间的某些整数整除,那么两个因子必定有一个小于或等于 sqrt(m),另一个大于或等于 sqrt(m)。例如 16 能被 2、4、8 整除:- 16=2*8,2 小于 4,8 大于 4;
- 16=4*4,两个因子正好等于 sqrt(16);
因此,第一种实现方案还可以简化,m 不必被 2~m-1 之间的每一个整数去除,只需被 2~sqrt(m) 之间的每一个整数去除就可以了。如果 m 不能被 2~sqrt(m) 间任一整数整除,m 必定是素数。
例如,判别 17 是是否为素数,只需使 17 被 2~sqrt(17)(2~4)之间的每一个整数去除,由于都不能整除,可以判定 17 是素数。sqrt(m),表示 m 的平方根。
实现代码如下:
#include <stdio.h>
#include <math.h>
int 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;
}
运行结果为:
输入一个整数:97
97是素数
声明:当前文章为本站“玩转C语言和数据结构”官方原创,由国家机构和地方版权局所签发的权威证书所保护。

ICP备案: