题目背景
对应的选择、判断题:试题 - 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;
}