1059. Prime Factors (25)
时间限制
50 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
HE, Qinming
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:97532468Sample Output:
97532468=2^2*11*17*101*1291
#include<iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
//////////////////////////////////////////////////////
//know the way to use recurssive
//
///////////////////////////////////////////////////////
bool isprime(int n){
if(n == 1)
return false;
if(n == 2)
return true;
else if(n & 0x1){
int limit = sqrt(n);
for(int i =3;i<=limit;i +=2)
if(n % i ==0)
return false;
return true;
}else
return false;
}
vector <int> v;
void dfactor(int n){
if(n <=1)
return ;
if(isprime(n)){
v.push_back(n);
return;
}else{
for(int i=2;i<n;i++){
if(n % i ==0){
dfactor(i);
dfactor(n/i);
return ;
}
}
}
}
int main()
{
int n;
cin >>n;
if(n==1){
cout <<"1=1" <<endl;
return 0;
}
dfactor(n);
int i = v.size();
vector<int>::iterator iter = v.begin();
sort(v.begin(),v.end());
cout <<n <<'=';
int last = *iter;
cout <<last;
i--;
iter++;
int count=1;
while(i){
if(last != *iter){
if(count != 1){
cout <<'^' <<count;
count =1;
}
cout <<'*' <<*iter;
last = *iter;
}
else{
count++;
}
iter++;
i--;
}
if(count != 1)
cout <<'^' <<count;
cout <<endl;
return 0;
}