PAT A1059

来源:互联网 发布:汉字书写顺序软件 编辑:程序博客网 时间:2024/06/05 07:52

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 = 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 <cmath>using namespace std;bool isPrime(int n){  if(n <= 1) return false;  int sqr = (int)sqrt(1.0 * n);  for(int i = 2; i <= sqr; i++){    if(n % i == 0)      return false;  }  return true;}int ss[10000];void init(){  int j = 0;  for(int i = 1; i < 100000; i++){    if(isPrime(i)){      ss[j++] = i;    }  }}struct Factors{  int x, cnt;  Factors(){    x = 0;    cnt = 0;  }}fac[10];int main(){  init();  int N;  cin>>N;  int sqr = (int)sqrt(1.0 * N);  int jl = 0, n = N;  if(n == 1) cout<<"1=1"<<endl;  else{    for(int i = 0; ss[i] <= sqr; i++){      if(n % ss[i] == 0){        fac[jl].x = ss[i];        while(n % ss[i] == 0){          fac[jl].cnt++;          n /= ss[i];        }           jl++;      }    }    if(n != 1){      fac[jl].x = n;      fac[jl++].cnt = 1;    }    cout<<N<<"=";    for(int i = 0; i < jl; i++){      if(i != 0) cout<<"*";      cout<<fac[i].x;      if(fac[i].cnt > 1)        cout<<"^"<<fac[i].cnt;    }  }   return 0;}






0 0
原创粉丝点击