📌  相关文章
📜  小于给定数字的素数 c++ (1)

📅  最后修改于: 2023-12-03 15:25:22.890000             🧑  作者: Mango

小于给定数字的素数 - C++

简介

素数是指只能被1和本身整除的自然数,例如2、3、5、7、11、13等。给定一个数字n,本文将介绍如何找到小于n的所有素数。

方法

我们可以通过一个叫做“筛法”的方法来找到小于n的所有素数。具体而言,我们从小到大遍历自然数,对于每个数,将其所有的倍数都标记为非质数。最终,未被标记的自然数即为所有素数。

代码实现
#include <iostream>
#include <vector>

using namespace std;

// 寻找小于n的所有素数
vector<int> findPrimes(int n) {
  vector<int> primes;
  vector<bool> isPrime(n + 1, true);

  for (int i = 2; i <= n; i++) {
    if (isPrime[i]) {
      primes.push_back(i);
      for (int j = i * 2; j <= n; j += i) {
        isPrime[j] = false;
      }
    }
  }

  return primes;
}

int main() {
  int n;
  cout << "请输入一个自然数n:";
  cin >> n;

  vector<int> primes = findPrimes(n);

  cout << "小于" << n << "的素数有:" << endl;
  for (int prime : primes) {
    cout << prime << " ";
  }
  cout << endl;

  return 0;
}

代码解释:

  1. 定义了一个函数findPrimes,该函数接受一个自然数n作为参数,返回小于n的所有素数。
  2. findPrimes函数中,首先定义了一个空向量primes和一个长度为n+1的布尔型数组isPrime,其中isPrime[i]表示i是否为素数。
  3. 从2开始遍历到n,如果当前数i是素数,则将其加入primes中,并将i的所有倍数标记为非素数。
  4. 最终,向量primes中存储的即为小于n的所有素数。
代码测试

我们将n分别设置为10、50和100进行测试。

测试代码:

int main() {
  cout << "测试n=10" << endl;
  vector<int> primes = findPrimes(10);
  for (int prime : primes) {
    cout << prime << " ";
  }
  cout << endl;

  cout << "测试n=50" << endl;
  primes = findPrimes(50);
  for (int prime : primes) {
    cout << prime << " ";
  }
  cout << endl;

  cout << "测试n=100" << endl;
  primes = findPrimes(100);
  for (int prime : primes) {
    cout << prime << " ";
  }
  cout << endl;

  return 0;
}

测试结果:

测试n=10
2 3 5 7 
测试n=50
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 
测试n=100
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 
总结

通过以上代码和测试,我们成功地使用筛法找到了小于给定数字n的所有素数。在实际编程中,我们也可以使用该算法来判断一个数字是否为素数。