Given any positive integer N, you are supposed to find all of its prime factors, and write them in the format N = p1k1×p2k2×⋯×pmkm.
Input Specification:
Each input file contains one test case which gives a positive integer N in the range of long int.
Output Specification:
Factor N in the format N =
p1^
k1*
p2^
k2*
…*
pm^
km, where pi's are prime factors of N in increasing order, and the exponent ki is the number of pi -- hence when there is only one pi, ki is 1 and must NOT be printed out.
Sample Input:
97532468
Sample Output:
97532468=2^2*11*17*101*1291
#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
#include<set>
using namespace std;
long int n;
int num[10010];
int main() {
cin >> n;
set<int> ans;
long int l = n;
for (int i = 2; i < 10010;) {
if (n == 1) break;
bool isprime = 1;
for (int j = 2; j*j <= i; j++) {
if (i%j == 0) isprime = 0;
}
if (isprime == 1 && n%i == 0) {
num[i]++;
ans.insert(i);
n /= i;
}
else i++;
}
printf("%ld=", l);
if (l == 1) printf("1");
else {
for (auto it = ans.begin(); it != ans.end(); it++) {
if (it == ans.begin()) {
if (num[*it] == 1) printf("%d", *it);
else if (num[*it] > 1) printf("%d^%d", *it, num[*it]);
}
else {
if (num[*it] == 1) printf("*%d", *it);
else if (num[*it] > 1) printf("*%d^%d", *it, num[*it]);
}
}
}
printf("\n");
return 0;
}