方法:先获取质数的hash表,再对N进行从小到大的整除。
注意点:N=1。
#include <iostream>
typedef long long ll;
const int maxn=100010;
bool isPrime[maxn]={0};
void init(){
for(int i=2;i<maxn;i++){
if(!isPrime[i]){
for(int j=2*i;j<maxn;j+=i){
if(!isPrime[j]) isPrime[j]=true; //true表示不是质数,0,1除外
}
}
}
}
int main(){
ll N;
scanf("%lld",&N);
if(N==1) printf("%lld=1",N);
else printf("%lld=",N);
init();
ll temp=N;
for(ll i=2;i*i<=temp;i++){
if(N%i==0&&!isPrime[i]){
int num=0;
while(N%i==0){
N=N/i;
num++;
}
if(num>1) printf("%d^%d",i,num);
else printf("%d",i);
if(N>1) printf("*");
}
}
if(N>1) printf("%lld",N);
return 0;
}