c++判断一堆数的积是否整除154或147 通过分解质因数解决
首先,我们需要找到这堆数的积。假设这堆数的个数为n,用一个数组arr来存储这堆数。我们可以通过遍历数组arr并将每个数乘到一个变量product中来得到这堆数的积。
接下来,我们需要分解质因数。假设这堆数的积为num,我们需要找出num的所有质因数。我们可以从2开始,依次尝试将num除以2、3、4、5...直到num的平方根,如果能整除就将这个数作为质因数,然后继续尝试将num除以这个质因数的倍数,直到num无法被除尽为止。
最后,我们检查154或147是否为num的因数。如果是,则说明这堆数的积整除154或147;否则,说明不整除。
下面是C++示例代码实现:
#include <iostream>
#include <vector>
#include <cmath>
// 判断是否为质数
bool isPrime(int num) {
if (num <= 1) {
return false;
}
for (int i = 2; i <= sqrt(num); i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
// 分解质因数
std::vector<int> primeFactors(int num) {
std::vector<int> factors;
for (int i = 2; i <= num; i++) {
if (isPrime(i)) {
while (num % i == 0) {
factors.push_back(i);
num /= i;
}
}
}
return factors;
}
int main() {
int n;
std::cout << "请输入堆数的个数:";
std::cin >> n;
std::vector<int> arr(n);
std::cout << "请输入这堆数:" << std::endl;
for (int i = 0; i < n; i++) {
std::cin >> arr[i];
}
// 计算堆数的积
long long product = 1;
for (int i = 0; i < n; i++) {
product *= arr[i];
}
// 分解质因数
std::vector<int> factors = primeFactors(product);
// 判断是否整除154或147
bool divisibleBy154 = false;
bool divisibleBy147 = false;
for (int factor : factors) {
if (factor == 2 || factor == 7 || factor == 11) {
divisibleBy154 = true;
}
if (factor == 3 || factor == 7) {
divisibleBy147 = true;
}
}
if (divisibleBy154) {
std::cout << "这堆数的积整除154" << std::endl;
} else {
std::cout << "这堆数的积不整除154" << std::endl;
}
if (divisibleBy147) {
std::cout << "这堆数的积整除147" << std::endl;
} else {
std::cout << "这堆数的积不整除147" << std::endl;
}
return 0;
}
希望对你有帮助
原文地址: https://www.cveoy.top/t/topic/iA7J 著作权归作者所有。请勿转载和采集!