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
求出所有质因子存到结果数组,输出控制。
/*2015.7.27cyq*/ #include <iostream> #include <vector> using namespace std; bool isprime(int n){ if(n<=1) return false; if(n==2||n==3) return true; for(int i=2;i*i<=n;i++) if(n%i==0) return false; return true; } int main(){ long N; cin>>N; if(N==1){ cout<<"1=1"; return 0; } vector<int> result;//结果数组,存储所有质因子 long tmp=N; while(tmp!=1){ for(int i=2;i<=tmp;i++){ if(isprime(i)&&(tmp%i==0)){ result.push_back(i); tmp/=i; break; } } } cout<<N<<"="; auto it=result.begin(); cout<<*it; long pre=*it; it++; int count=1; while(it!=result.end()){ while(it<result.end()&&*it==pre){ count++; it++; } //it指向一个新的数或result.end() if(count>1){ cout<<"^"<<count; count=1; }else{ cout<<"*"<<*it; pre=*it; it++; } } return 0; }