#1 素数定义
素数又叫质数(prime number),定义为在大于1的自然数中,除1和它本身外不再有其他因数。
#2 编程实现(最普通)
判断一个数a是否为素数,只需用a对2到(a-1)范围内的数求模。只要有一个模为0,则a不是素数。
#include<stdio.h>
int main()
{
int num = 0;
int tmp = 2;
int flag = 1; // 假设输入的数是素数,后面再判断
printf("请输入一个正整数(大于2):");
scanf("%d", &num);
for (; tmp < num; tmp++) // 依次跟2~(num-1)取模
{
if (num % tmp == 0) //如果有num % tmp 等于0,说明有其他因数,因此这个数不是素数
{
flag = 0; //等于0,也就是不是素数
break;
}
}
if (flag == 1)
{
printf("%d是素数\n", num);
}
else
{
printf("%d不是素数\n", num);
}
return 0;
}
#3 优化
可以对上面的代码进行优化,
①首先素数不可能是偶数,因为偶数有2这个因数
②如果一个数m 有因数,则至少有一个因数是小于或等于m的开平方
#include<stdio.h>
int main()
{
int num = 0;
int tmp = 2;
int flag = 1; // 假设输入的数是素数,后面再判断
printf("请输入一个正整数(大于2):");
scanf("%d", &num);
for (; tmp <= sqrt(num); tmp++) // 依次跟2~(num-1)取模
{
if(num % 2 == 0) //判断是否为偶数
{
flag = 0;
break;
}
if (num % tmp == 0) //如果有num % tmp 等于0,说明有其他因数,因此这个数不是素数
{
flag = 0; //等于0,也就是不是素数
break;
}
}
if (flag == 1)
{
printf("%d是素数\n", num);
}
else
{
printf("%d不是素数\n", num);
}
return 0;
}
#4 再优化
#include <stdio.h>
#include <stdbool.h>
int main()
{
int num = 0;
int tmp = 2;
bool isPrime = true; // 假设输入的数是素数,后面再判断
printf("请输入一个正整数(大于2):");
while ((scanf("%d", &num)) == 1)
{
for (tmp = 3, isPrime = true; tmp <= sqrt(num); tmp+2)
{
if (num % 2 == 0) //判断是否为偶数
{
isPrime = false;
break;
}
if (num % tmp == 0)
{
isPrime = false;
break;
}
}
if (isPrime)
{
printf("%d是素数\n", num);
}
else
{
printf("%d不是素数\n", num);
}
}
return 0;
以上代码可以实现多次输入。