判断一个数是否为素数
算法思想
设一个正整数x,sqrt(x)为x开平方后的值,若x不为素数,则x=a*b,a,b为2~x-1之间的整数,且当2=< a <= sqrt(x)时,必有sqrt(x)=< b <= x-1,即a和b必有一个数在2~sqrt(x)范围内,反推之,若x不可被2~sqrt(x)范围内的任何整数整除,则x必为素数。
代码实现
#include
#include
int main()
{
int x;
scanf("%d", &x);
printf("%d是否为素数: %d", x, IsPrime(x));
return 0;
}
int IsPrime(int x)
{
int i, squareRoot;
//小于或等于1的整数均不为素数,预先排除
if(x <= 1) return 0;
//sqrt(x)为开平方函数,其返回结果为浮点数,通过类型强转获得小于该浮点数的最大整数
squareRoot = (int)sqrt(x);
for(int i = 2;i <= squareRoot;i++)
{
//通过取余函数,若除得余数为0,说明x可被i整除,x不为素数
if(x%i == 0) return 0;