c++编写一个多文档函数判断一个数是不是偶数,然后将这个数分解成两个素数
时间: 2024-11-27 18:21:27 浏览: 21
在 C++ 中,我们可以创建一个多文档函数 (Function Object) 来判断一个数是否为偶数,并提供一个辅助函数来尝试将其分解成两个素数。首先,我们定义一个用于判断奇偶性的模板函数,然后实现一个辅助函数用于素数检查和分解。注意,找到两个素数因子对于任意给定的大数并不总是有效,因为并不是所有大整数都可以分解成两个素数之积。
```cpp
#include <iostream>
#include <vector>
// 判断一个数是否为偶数
template <typename T>
bool is_even(const T& num) {
return num % 2 == 0;
}
// 辅助函数:查找两个素数因子,返回它们的乘积
std::pair<int, int> find_prime_factors(T num) {
if (num <= 1) {
std::cerr << "Number must be greater than 1 for prime factor decomposition." << std::endl;
return {0, 0};
}
// 遍历从2到num-1,尝试找到因子
for (T i = 2; i * i <= num; ++i) {
if (num % i == 0) {
T j = num / i; // 另一个因子
if (is_even(i)) {
std::cout << "Even number has no prime factors as they are divisible by 2.\n";
return {0, 0}; // 如果找到的是偶数,则不是素数
}
if (!is_even(j) && is_prime(i) && is_prime(j)) {
return {i, j}; // 返回素数因子
}
}
}
std::cout << "No two prime factors found for the given number.\n";
return {0, 0}; // 未找到两个素数因子
}
// 检查一个数是否为素数
bool is_prime(int num) {
if (num <= 1) {
return false;
}
for (int i = 2; i * i <= num; ++i) {
if (num % i == 0) {
return false;
}
}
return true;
}
int main() {
int input_num;
std::cout << "Enter a number to check if it's even and decompose into prime factors (if possible): ";
std::cin >> input_num;
if (is_even(input_num)) {
std::cout << input_num << " is an even number.\n";
} else {
auto factors = find_prime_factors(input_num);
if (factors.first != 0 && factors.second != 0) {
std::cout << "The number can be decomposed into prime factors: "
<< factors.first << " and " << factors.second << ".\n";
}
}
return 0;
}
```
阅读全文