21xrx.com
2024-12-22 21:12:54 Sunday
登录
文章检索 我的文章 写文章
C++实现素数判断的方法及代码
2023-07-11 01:54:45 深夜i     --     --
C++ 素数 判断 方法 代码

素数是指只能被1和其本身整除的正整数,例如2、3、5、7等。在计算机编程中,经常需要判断一个数是否是素数。C++语言提供了许多方法来判断素数,本文将介绍一些实现素数判断的方法及相关代码。

1. 常规算法

最简单的判断素数的方法是使用常规算法,即对于每个要判断的数n,从2到n-1遍历,检查n是否能被这些数整除。如果找到了能够整除n的数,那么n就不是素数。如果遍历结束都没有发现能够整除n的数,那么n就是素数。

以下是使用常规算法实现的素数判断代码:


bool isPrime(int n) {

  if (n <= 1)

    // 1不是素数

    return false;

  

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

    if (n % i == 0)

      // 找到了能够整除n的数

  }

  // 遍历结束,n是素数

  return true;

}

2. 优化算法

上面的常规算法虽然简单易懂,但是对于大数来说效率较低。因此,需要使用更优化的算法来判断素数。

一种常见的优化算法是减少遍历次数,即只需遍历到sqrt(n)即可。这是因为,如果n的因数中有大于sqrt(n)的,那么一定会有小于sqrt(n)的因数,所以只需要检查小于等于sqrt(n)的因数即可。

以下是使用优化算法实现的素数判断代码:


bool isPrime(int n) {

  if (n <= 1)

    // 1不是素数

    return false;

  

  int sqrt_n = sqrt(n);

  for (int i = 2; i <= sqrt_n; ++i) {

    if (n % i == 0) n不是素数

      return false;

    

  }

  // 遍历结束,n是素数

  return true;

}

3. 厄拉托色尼筛法

厄拉托色尼筛法是一种比较高效的素数筛法,其思想是从2开始遍历,将其之后所有能够被它整除的数标记为合数,然后遍历下一个没有被标记为合数的数,对它进行同样的操作,以此类推。最后,没有被标记为合数的数都是素数。

以下是使用厄拉托色尼筛法实现的素数判断代码:


bool isPrime(int n) {

  if (n <= 1)

    // 1不是素数

    return false;

  

  vector<bool> is_prime(n+1, true);

  is_prime[0] = false;

  is_prime[1] = false;

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

    if (is_prime[i]) {

      for (int j = i * i; j <= n; j += i) {

        is_prime[j] = false;

      }

    }

  }

  // 判断n是否为素数

  return is_prime[n];

}

以上是三种实现素数判断的方法及相关代码。在实际编程中,可以根据需要选择不同的算法来进行素数判断。

  
  

评论区

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