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 <vector>
#include <iostream>
#include <cmath>
using namespace std;
bool isPrime(long int N){
if(N==1) return false;
if(N==2) return true;
int r=floor(sqrt(N)+0.5);
for(long int i=2;i<=r;i++) {
if(N%i==0) return false;
}
return true;
}
struct PF{
long int prime;
long int expo;
PF(long int x,long int y):prime(x),expo(y){}
};
vector<PF> getPF(long int N){
vector<PF> result;
int count=0;
long int num=N;
for(int i=2;i<=N;i++){
if(num<=1) break;//没有这句会超时
int j=0;
int flag=1;
if(isPrime(i)) {
count=0;
while(num%i==0){
num/=i;
count++;
}
if(count>0) {
result.push_back(PF(i,count));
}
}
}
return result;
}
int main(){
long int N;
cin>>N;
if(N==1) {
cout<<"1=1"<<endl;
return 0;
}
vector<PF> result=getPF(N);
int sz=result.size();
cout<<N<<"=";
if(result[0].expo>1) cout<<result[0].prime<<"^"<<result[0].expo;
else cout<<result[0].prime;
for(long int k=1;k<sz;k++){
if(result[k].expo>1) cout<<"*"<<result[k].prime<<"^"<<result[k].expo;
else cout<<"*"<<result[k].prime;
}
return 0;
}