21xrx.com
2024-12-22 17:18:27 Sunday
登录
文章检索 我的文章 写文章
C++中如何表示素数?
2023-07-14 14:12:35 深夜i     --     --
C++ 素数 表示

在C++中,我们可以使用质数判定算法来表示素数。质数是指除了1和自身外,没有其他因数的正整数。下面介绍两种常用的判断素数的方法。

方法一:试除法

试除法是一种简单的判断素数的方法,即对于一个数n,从2开始一直试除,如果能够除尽,代表n不是素数。如果试除到n的平方根,都无法整除,则n是素数。

以下是使用试除法来判断一个数是否为素数的代码:


bool is_prime(int n)

{

  if (n < 2)

  

    return false;

  

  for (int i = 2; i <= sqrt(n); i++) // 从2到sqrt(n)依次试除

  {

    if (n % i == 0) // 能够整除,代表不是素数

    

      return false;

    

  }

  return true; // 不能被整除,代表是素数

}

方法二:埃氏筛法

埃氏筛法是一种通过筛选来找出素数的方法。具体来说,对于一个正整数n,我们从2开始标记其倍数,一直标记到n的平方根。如果一个数没有被标记,就代表它是素数。

以下是使用埃氏筛法来找出素数的代码:


vector<int> get_primes(int n)

{

  vector<bool> is_prime(n+1, true); // 标记数组,初始都为true

  vector<int> primes; // 存放素数的数组

  for (int i = 2; i <= sqrt(n); i++)

  {

    if (is_prime[i])

    {

      for (int j = i*i; j <= n; j += i) // 标记i的倍数

      {

        is_prime[j] = false;

      }

    }

  }

  for (int i = 2; i <= n; i++)

  {

    if (is_prime[i])

    {

      primes.push_back(i);

    }

  }

  return primes;

}

上述代码中,先创建一个长度为n+1的标记数组is_prime,初始都为true。从2开始,依次将其倍数标记为false,直到遍历到n的平方根。最后遍历is_prime数组,将所有为true的索引输出,即为所有小于等于n的素数。

总结

以上介绍了C++中表示素数的两种常用方法,试除法和埃氏筛法。试除法是一种直接的方法,但随着数值的增大效率会变得很低。埃氏筛法则能够快速地找出一定范围内的素数。在实际应用中,可以根据具体情况选择合适的方法。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复