数学问题:判断一个数是否是质数(素数)

2024-02-13  本文已影响0人  wayyyy

质数的定义:质数定义为在大于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 满足:
f1*f2 = n
f1 ≤ f2,则有:

  1. f1=f2=sqrt(n)(表示n的算术平方根)
  2. f1<sqrt(n)<f2

如果存在大于 n 的算术平方根的正整数 f2 能整除 n ,那么一定存在小于 n 的算术平方根的正整数 f1 能整除 n,且f1×f2=n(假设 f1 和 f2 都大于1小于 n )。该命题的逆否命题同样成立。因此只需要遍历到 sqrt(n)即可,如果遍历到 sqrt(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;
}
上一篇 下一篇

猜你喜欢

热点阅读