Given any positive integer N, you are supposed to find all of its prime factors, and write them in the format N = p1^k1 * p2^k2 *…*pm^km.
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 <bits/stdc++.h>
using namespace std;
const int maxn = 10000;
long n;
bool vis[maxn];
vector<int> p;
vector< pair<int, int> > e;
void init(){
for(int i = 2; i < maxn; ++i){
if(!vis[i]) p.push_back(i);
for(int j = i; j < maxn; j += i) vis[j] = true;
}
}
int main(){
init();
cin >> n;
if(n == 1){
printf("1=1\n");
return 0;
}
long nn = n;
for(int i = 0; i < p.size() && nn; ++i){
if(nn % p[i] == 0){
int k = 0;
while(nn % p[i] == 0){
k++;
nn /= p[i];
}
e.push_back(make_pair(p[i], k));
}
}
printf("%ld=", n);
for(int i = 0; i < e.size(); ++i){
if(i) printf("*");
printf("%d", e[i].first);
if(e[i].second != 1) printf("^%d", e[i].second);
}
printf("\n");
return 0;
}