概念:素数又称质数。 所谓素数是指除了 1 和它本身以外, 不能被任何整数整除的数, 例如 17 就是素数, 因为它不能被 2~16的任一整数整除。
思路 1): 因此判断一个整数 m 是否是素数, 只需把 m 被 2 ~ m-1 之间的每一个整数去除, 如果都不能被整除, 那么m 就是一个素数。
代码如下:
#include <stdio.h>
int main()
{
int count = 0; // 素数的个数
int num = 0; // 输入的整数
printf("输入一个整数: ");
scanf("%d", &num);
for (int i = 2; i < num; i++)
{
if (num % i == 0)
{
count++; // 素数个数加 1
}
}
if (count == 0)
{
printf("%d 是素数.\n", num);
}
else
{
printf("%d 不是素数.\n", num);
}
return 0;
}
思路 2): 另外判断方法还可以简化。 m 不必被 2 ~ m-1 之间的每一个整数去除,只需被 2 ~
之间的每一个整数去除就可以了。 如果 m 不能被 2 ~
间任一整数整除, m 必定是素数。例如判别 17 是是否为素数,只需使 17 被2~4 之间的每一个整数去除, 由于都不能整除,可以判定 17 是素数。
代码如下:
#include <stdio.h>
#include <math.h>
int main()
{
int m; // 输入的整数
int i; // 循环次数
int k; // m 的平方根
printf("输入一个整数: ");
scanf("%d", &m);
k = (int)sqrt((double)m);// 求平方根, 注意 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 是素数。
输入一个整数: 12
12不是素数。