版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xr469786706/article/details/87728385
PAT(甲级)渡劫(十九)-Prime Factors(25)
代码如下:
#include <iostream>
#include <cstdio>
#include <cmath>
const int maxn = 60000;
bool mark[maxn];
int prime[maxn];
int primeSize = 0;
void init(){
for(int i = 0 ; i < maxn ; i++){
mark[i] = false;
}
for(int i = 2 ; i < maxn ; i++){
if(mark[i] == true) continue;
prime[primeSize++] = i;
for(int j = 2*i ; j < maxn ; j += i)
mark[j] = true;
}
}
int main(){
freopen("in.txt","r",stdin);
int num;
init();
scanf("%d",&num);
if(num == 1){
printf("1=1");
return 0;
}
printf("%d=",num);
int ansPrime[maxn];
int ansSize = 0;
int ansNum[maxn];
for(int i = 0 ; i < primeSize ; i++){
if(num%prime[i] == 0){
ansPrime[ansSize] = prime[i];
ansNum[ansSize] = 0;
while(num%prime[i] == 0){
ansNum[ansSize]++;
num/=prime[i];
}
ansSize++;
if(num == 1) break;
}
}
if(num != 1){
ansPrime[ansSize] = num;
ansNum[ansSize++] = 1;
}
for(int i = 0 ; i < ansSize ; i++){
if(i != ansSize - 1){
if(ansNum[i] > 1){
printf("%d^%d*",ansPrime[i],ansNum[i]);
}else{
printf("%d*",ansPrime[i]);
}
}else{
if(ansNum[i] > 1){
printf("%d^%d",ansPrime[i],ansNum[i]);
}else{
printf("%d",ansPrime[i]);
}
}
}
return 0;
}