题解:AcWing 867 分解质因数

【题目来源】

AcWing:867. 分解质因数 - AcWing题库

【题目描述】

给定 \(n\) 个正整数 \(a_i\),将每个数分解质因数,并按照质因数从小到大的顺序输出每个质因数的底数和指数。

【输入】

第一行包含整数 \(n\)

接下来 \(n\) 行,每行包含一个正整数 \(a_i\)

【输出】

对于每个正整数 \(a_i\),按照从小到大的顺序输出其分解质因数后,每个质因数的底数和指数,每个底数和指数占一行。

每个正整数的质因数全部输出完毕后,输出一个空行。

【输入样例】

2
6
8

【输出样例】

2 1
3 1

2 3

【解题思路】

image

【算法标签】

《AcWing 867 分解质因数》 #数学知识# #分解质因数# #试除法#

【代码详解】

#include <bits/stdc++.h>
using namespace std;

int n;  // 定义变量n,表示输入的数的个数

// 分解质因数的函数
void divide(int x) {
    // 从2开始枚举可能的质因数
    for (int i = 2; i <= x / i; i++) {
        if (x % i == 0) {  // 如果i是x的质因数
            int s = 0;     // s记录质因数i的幂次
            while (x % i == 0) {  // 将x中的所有i因子除掉
                x = x / i;
                s++;
            }
            cout << i << " " << s << endl;  // 输出质因数i及其幂次
        }
    }

    // 如果x大于1,说明x本身是一个质数
    if (x > 1) {
        cout << x << " " << 1 << endl;  // 输出x及其幂次1
    }

    cout << endl;  // 每组分解结果后输出一个空行
}

int main() {
    cin >> n;  // 输入数的个数n

    // 循环处理每个数
    while (n--) {
        int x;
        cin >> x;  // 输入待分解的数x
        divide(x); // 调用divide函数分解x的质因数
    }

    return 0;
}

【运行结果】

2
6
2 1
3 1

8
2 3
posted @ 2026-02-21 20:57  团爸讲算法  阅读(0)  评论(0)    收藏  举报