《B3871 [GESP202309 五级] 因数分解》

题目背景

对应的选择、判断题:试题 - GESP 202309 C++ 五级 - 洛谷有题

题目描述

每个正整数都可以分解成素数的乘积,例如: 6=2×3,20=22×5。

现在,给定一个正整数,请按要求输出它的因数分解式。

输入格式

输入第一行,包含一个正整数 N。约定 2≤N≤1012。

输出格式

输出一行,为 N 的因数分解式。要求按质因数由小到大排列,乘号用星号 * 表示,且左右各空一格。当且仅当一个素数出现多次时,将它们合并为指数形式,用上箭头 ^ 表示,且左右不空格。

输入输出样例

输入 #1复制

复制代码
6

输出 #1复制

复制代码
2 * 3

输入 #2复制

复制代码
20

输出 #2复制

复制代码
2^2 * 5

输入 #3复制

复制代码
23

输出 #3复制

复制代码
23

代码实现:

cpp 复制代码
#include <iostream>
#include <vector>
using namespace std;
typedef long long ll;

int main()
{
    ll n;
    cin >> n;
    vector<pair<ll, int>> fac;

    for (ll i = 2; i * i <= n; i++)
    {
        if (n % i == 0)
        {
            int cnt = 0;
            while (n % i == 0)
            {
                cnt++;
                n /= i;
            }
            fac.push_back({i, cnt});
        }
    }
    if (n > 1)
        fac.push_back({n, 1});

    for (int i = 0; i < fac.size(); i++)
    {
        ll p = fac[i].first;
        int e = fac[i].second;
        if (e == 1)
            cout << p;
        else
            cout << p << "^" << e;
        if (i != fac.size() - 1)
            cout << " * ";
    }
    return 0;
}