首先,我们需要找到这堆数的积。假设这堆数的个数为 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;
}

希望对你有帮助!

C++ 判断数字集合的积是否能被 154 或 147 整除 - 使用质因数分解

原文地址: https://www.cveoy.top/t/topic/qh0u 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录