PAT(甲级)渡劫(十九)-Prime Factors(25)

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}

运行结果:

猜你喜欢

转载自blog.csdn.net/xr469786706/article/details/87728385
今日推荐