这段代码的功能是分解质因数,即将一个正整数分解为若干个质数的乘积,并输出每个质因数及其对应的指数。以下是代码的详细思路解析:


1. 问题背景

给定一组正整数,需要将每个数分解为质因数的乘积,并输出每个质因数及其对应的指数。例如,对于数字 18,其质因数分解为 2^1 * 3^2。

2. 代码逻辑解析

(1) 质因数分解函数
void divide(int x)
{
    for (int i = 2; i <= x / i; i++)
    {
        if (x % i == 0)
        {
            int s = 0;
            while (x % i == 0)
            {
                x /= i;
                s++;
            }
            cout << i << ' ' << s << endl;
        }
    }
    if (x > 1) cout << x << ' ' << 1 << endl;
    cout << endl;
}
  • 输入:一个正整数 x。

  • 输出:每个质因数及其对应的指数。

  • 逻辑:

    1. 外层循环:

      • 从2开始,遍历到 sqrt(x)(即 x / i),检查 x 是否能被 i 整除。

    2. 内层循环:

      • 如果 x 能被 i 整除,使用一个循环不断除以 i,直到 x 不能被 i 整除。

      • 记录 i 的指数 s。

    3. 输出:

      • 输出质因数 i 及其指数 s。

    4. 处理剩余部分:

      • 如果最终 x 大于1,说明 x 本身是一个质数,输出 x 及其指数1。

    5. 换行:

      • 每个数的质因数分解结束后输出一个换行符。

(2) 主函数
int main()
{
    int n; cin >> n;  // 输入测试用例的数量
    while (n--)
    {
        int x; cin >> x;  // 输入一个整数
        divide(x);  // 调用 divide 函数进行质因数分解
    }
    return 0;
}
  • 输入:测试用例的数量 n,然后是 n 个正整数。

  • 逻辑:

    • 使用一个循环处理每个测试用例。

    • 对于每个整数 x,调用 divide 函数进行质因数分解。


3. 示例运行

输入:
3
18
12
25
运行过程:
  1. 输入测试用例数量 n = 3。

  2. 输入3个整数:18, 12, 25。

  3. 对每个整数调用 divide 函数:

    • divide(18):

      • 2 1(2的指数为1)

      • 3 2(3的指数为2)

    • divide(12):

      • 2 2(2的指数为2)

      • 3 1(3的指数为1)

    • divide(25):

      • 5 2(5的指数为2)

输出:
2 1
3 2

2 2
3 1

5 2

4. 总结

这段代码的核心思路是通过一个高效的质因数分解函数 divide,结合主函数中的循环,逐个分解输入的整数为质因数的乘积,并输出每个质因数及其对应的指数。这种方法适用于处理一组正整数的质因数分解问题。

完整代码

#include<bits/stdc++.h>
// 使用标准命名空间,这样可以直接使用标准库中的类和函数,无需加std::前缀
using namespace std;

// 分解质因数的函数,参数x是要分解的整数
void divide(int x)
{
    // 从最小的质数2开始遍历到x的平方根
    for(int i = 2; i <= x / i; i ++)
        // 如果i是x的因数
        if(x % i == 0)
        {
            // 记录当前质因数i的指数
            int s = 0;
            // 不断将x除以i,直到x不能再被i整除
            while(x % i == 0) x /= i, s ++;
            // 输出当前质因数i及其指数s
            cout << i << ' ' << s << endl;
        }
    // 如果x大于1,说明x本身是一个质数,输出该质数及其指数1
    if(x > 1) cout << x << ' ' << 1 << endl;
    // 输出一个空行,用于分隔不同数字的分解结果
    cout << endl;
}

int main()
{
    int n; 
    // 从标准输入读取一个整数n,表示接下来要处理的数字的数量
    cin >> n;
    // 循环n次
    while(n --)
    {
        int x; 
        // 从标准输入读取一个整数x,表示要分解的数字
        cin >> x;
        // 调用divide函数对x进行质因数分解
        divide(x);
    }
    // 程序正常结束,返回0
    return 0;
} 

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐