题目:
编写一个函数,判断一个数是否为素数,并返回结果
素数定义:(质数prime number)定义为在大于1的自然数中,除了1和它本身以外不再有其他因数,素数有无穷多个。
思路1:
用目标数依次对从2 ~ n-1遍历的每个数作取余操作(注意不包括1和其本身),如果取余结果为零,说明存在其他的因数,返回false
思路1代码实现:
时间复杂度 O(n)
int isPrime(int k)
{
int j;
for ( j=2; j<k; j++ )
{
if(k%j==0) // 如果不为素数返回0
{
return 0;
}
}
return 1; // 反之则返回1
}
思路2:
在思路1基础上优化,缩小遍历范围,用目标数依次对从2 ~ √n(平方根)遍历的每个数作取余操作(注意不包括1和其本身),如果取余结果为零,说明存在其他的因数,返回false
为什么是平方根√n呢?因为不相同的两个因数如果相乘等于n,那么一定是分布在√n的左右两侧的,也就是说一定有一个大于√n,一个小于√n,那么只要验证的时候只要验证到等于平方根√n的时候就可以了,即一个合数一定含有小于它平方根的质因子。
思路2代码实现:
时间复杂度 O(√n)
int isPrime(int n)
{
int i;
for ( i=2; i<=sqrt(n); i++ )
{
if(n%i==0) // 如果不为素数返回0
{
return 0;
}
}
return 1; // 反之则返回1
}