质数的定义:质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。比如2是质数,3是质数,4不是质数。
试除法
bool IsPrimeNumber(int n)
{
if (n < 2)
return false;
for (int i = 2; i < n; i++)
{
if (n % i == 0)
return false;
}
return true;
}
但是仍然有优化的空间,假设 n 是合数,那么即存在正整数 f1 和 正整数 f2 满足:
设,则有:
- (表示n的算术平方根)
- 。
如果存在大于 n 的算术平方根的正整数 f2 能整除 n ,那么一定存在小于 n 的算术平方根的正整数 f1 能整除 n,且(假设 f1 和 f2 都大于1小于 n )。该命题的逆否命题同样成立。因此只需要遍历到 即可,如果遍历到 仍未发现能整除n的数,则n是质数。
bool IsPrimeNumber(int n)
{
if (n < 2)
return false;
int topLimit = sqrt(n);
for (int i = 2; i <= topLimit; i++)
{
if (n % i == 0)
return false;
}
return true;
}
网友评论