关于质数的C++代码,以下是几种常见的实现方法及示例代码:
一、判断单个数是否为质数
#include <iostream>
#include <cmath>
bool is_prime(int n) {
if (n < 2) return false;
for (int i = 2; i <= std::sqrt(n); ++i) {
if (n % i == 0) return false;
}
return true;
}
int main() {
int num;
std::cout << "请输入一个整数: ";
std::cin >> num;
if (is_prime(num)) {
std::cout << num << " 是质数" << std::endl;
} else {
std::cout << num << " 不是质数" << std::endl;
}
return 0;
}
二、生成指定范围内的所有质数
#include <iostream>
#include <vector>
#include <cmath>
std::vector<int> generate_primes(int min, int max) {
std::vector<int> primes;
for (int num = min; num <= max; ++num) {
if (is_prime(num)) {
primes.push_back(num);
}
}
return primes;
}
int main() {
int min_val, max_val;
std::cout << "请输入最小值和最大值: ";
std::cin >> min_val >> max_val;
std::vector<int> primes = generate_primes(min_val, max_val);
std::cout << "质数列表: ";
for (int prime : primes) {
std::cout << prime << " ";
}
std::cout << std::endl;
return 0;
}
三、使用埃拉托斯特尼筛法生成质数
#include <iostream>
#include <vector>
std::vector<int> sieve_of_eratosthenes(int max) {
std::vector<bool> is_prime(max + 1, true);
is_prime = is_prime = false;
for (int i = 2; i * i <= max; ++i) {
if (is_prime[i]) {
for (int j = i * i; j <= max; j += i) {
is_prime[j] = false;
}
}
}
std::vector<int> primes;
for (int i = 2; i <= max; ++i) {
if (is_prime[i]) {
primes.push_back(i);
}
}
return primes;
}
int main() {
int max_val;
std::cout << "请输入最大值: ";
std::cin >> max_val;
std::vector<int> primes = sieve_of_eratosthenes(max_val);
std::cout << "质数列表: ";
for (int prime : primes) {
std::cout << prime << " ";
}
std::cout << std::endl;
return 0;
}
四、生成质数排列(全排列)
#include <iostream>
#include <vector>
#include <algorithm>
void permute(std::vector<int>& nums, int start, std::vector<std::vector<int>>& result) {
if (start == nums.size() - 1) {
result.push_back(nums);
return;
}
for (int i = start; i < nums.size(); ++i) {
std::swap(nums[start], nums[i]);
permute(nums, start + 1, result);
std::swap(nums[start], nums[i]); // backtrack
}
}
int main() {
int max_val = 10;
std::vector<int> primes = sieve_of_eratosthenes(max_val);
std::vector<std::vector<int>> prime_permutations;
permute(primes, 0, prime_permutations);
std::cout << "质数排列数量: " << prime_permutations.size() << std::endl;
for (const auto& perm : prime_permutations) {
for (int prime : perm) {
std::cout << prime << " ";
}
std::cout << std::endl;
}
return 0;
}
说明
-
判断质数 :使用试除法,时间复杂度为O(√n)。
-
生成质数列表 :遍历指定范围,调用判断函数筛选质数。
-
埃拉托斯特尼筛法 :高效生成小范围质数列表。
-
质数排列 :先生成质数列表,再通过全排列生成所有组合。
根据需求选择合适的方法,例如判断单个数、