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 <bits/stdc++.h> using namespace std; const int maxn = 100010; struct factor { int x; int cnt; } fac[10]; bool isPrim(int n) //判断素数 { if(n==1) return false; int sqr = (int)sqrt(1.0*n); for(int i=2; i<=sqr; i++) { if(n%i==0) return false; } return true; } int prime[maxn],pNum=0; void Find_Prim() { for(int i=1; i<maxn; i++) { if(isPrim(i)==true) { prime[pNum++] = i; } } } int main() { Find_Prim(); int n,num=0; cin>>n; if(n==1) cout<<"1=1"; else { printf("%d=",n); int sqr = (int)sqrt(1.0*n); for(int i=0; i<pNum&&prime[i]<=sqr; i++) { if(n%prime[i]==0) { fac[num].x = prime[i]; fac[num].cnt = 0; while(n%prime[i]==0) { fac[num].cnt++; n /=prime[i]; } num++; } if(n==1) break; } if(n!=1) { fac[num].x = n; fac[num++].cnt = 1; } for(int i=0; i<num; i++) { if(i>0) cout<<"*"; cout<<fac[i].x; if(fac[i].cnt>1) { printf("^%d",fac[i].cnt); } } } cout<<endl; //cout << "Hello world!" << endl; return 0; }