1059. Prime Factors (25) PAT 甲级

来源:互联网 发布:怎么开好淘宝店 编辑:程序博客网 时间:2024/05/22 03:03

Problem Description

Given any positive integer N, you are supposed to find all of its prime factors, and write them in the format N = p1^k1 * p2^k2 *…*pm^km.

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<math.h>using namespace std;#define MAX_N 100010struct factor{    int x;    int cnt;}fact[10];bool is_prime(int n){    if(n==1)    return false;    int sqr=(int)sqrt(n);    for(int i=2;i<=sqr;i++){        if(n%i==0)  return false;    }    return true;}int prime[MAX_N];int pNum=0;void prime_Table(){    for(int i=1;i<MAX_N;i++){        if(is_prime(i)){            prime[pNum++]=i;        }    }}int main(){    prime_Table();    int n;    int num=0;    cin>>n;    if(n==1)        cout<<"1=1";    else{        cout<<n<<"=";        int sqr=(int)sqrt(n);        for(int i=0;i<pNum&&prime[i]<=sqr;i++){            if(n%prime[i]==0){                fact[num].x=prime[i];                fact[num].cnt=0;                while(n%prime[i]==0){                    fact[num].cnt++;                    n/=prime[i];                }                num++;            }            if(n==1)    break;        }        if(n!=1)    {            fact[num].x=n;            fact[num++].cnt=1;        }        for(int i=0;i<num;i++){            if(i>0) cout<<"*";            cout<<fact[i].x;            if(fact[i].cnt>1){                cout<<"^"<<fact[i].cnt;            }        }    }}
0 0
原创粉丝点击