1059 Prime Factors (25 分)
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<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<vector>
#include<map>
using namespace std;
long long LL;
struct factor{
int digit;
int num;
};
bool isPrime(int a){
if(a<=1) return false;
int sqr=sqrt(1.0*a);
for(int i=2;i<=sqr;i++){
if(a%i==0) return false;
}
return true;
}
int prime[100010],prenum=0;
void findPrime(){
for(int i=0;i<100010;i++){
if(isPrime(i)){
prime[prenum++]=i;
}
}
}
int n;
vector<int> list,ans;
void dfs(int index , int sum ,int last){
if(sum==n&&last==1){
ans=list;
return;
}
if(last%prime[index]==0){
list.push_back(prime[index]);
dfs(index,sum*prime[index],last/prime[index]);
list.pop_back();
}
else{
dfs(index+1,sum,last);
}
}
int main() {
findPrime();
cin>>n;
int m=0;
long sqr=sqrt(1.0*n);
if(n==1) printf("1=1\n");
else{
printf("%d=",n);
dfs(0,1,n);
map<int,int> fac;
for(int i=0;i<ans.size();i++){
fac[ans[i]]++;
}
for(map<int,int>::iterator iter=fac.begin();iter!=fac.end();iter++){
if(iter!=fac.begin()) printf("*");
printf("%d",iter->first);
if(iter->second>1){
printf("^%d",iter->second);
}
}
}
return 0;
}