题目描述
每个正整数都可以分解成素数的乘积,例如: 6=2×36=2\times 36=2×3,20=22×520=2^2\times520=22×5。
现在,给定一个正整数,请按要求输出它的因数分解式。
输入格式
输入第一行,包含一个正整数 NNN。约定 2≤N≤10122 \le N \le 10^{12}2≤N≤1012。
输出格式
输出一行,为的因数分解式。要求按质因数由小到大排列,乘号用星号 *
表示,且左右各空一格。当且仅当一个素数出现多次时,将它们合并为指数形式,用上箭头 ^
表示,且左右不空格。
输入输出样例 #1
输入 #1
6
输出 #1
2 * 3
输入输出样例 #2
输入 #2
20
输出 #2
2^2 * 5
输入输出样例 #3
输入 #3
23
输出 #3
23
solution
从 2 开始尝试因子,如果可以整出就一直除到不能除为止
代码
#include "iostream"
#include "cstddef"
#include "vector"
#include "unordered_map"
#include "unordered_set"
#include "queue"
#include "stack"
#include "algorithm"
#include "sstream"
#include "format"
#include "cstdio"
#include "cstring"
#include "random"
#include "ctime"
#include "cstdlib"
#include "algorithm"
using namespace std;
int main() {
long long n, x = 2;
bool flag = false;
cin >> n;
while (n > 1) {
int s = 0;
while (n % x == 0) {
n /= x;
s++;
}
if (s) {
if (flag) cout << " * ";
flag = true;
cout << x;
if (s > 1) cout << '^' << s;
}
if(x * x > n){
if (flag) cout << " * ";
cout << n;
break;
}
x++;
}
}