1059. Prime Factors (25)

来源:互联网 发布:江苏移动网络测速 编辑:程序博客网 时间:2024/05/16 12:16

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

总觉得这道题目有点问题,要是输入的大数就是一个素数呢!肯定会超时啊!!!!晕~~~

思路:找出素数列表,依次与N判断即可

AC代码:

#include <iostream>#include <vector>#include <math.h>using namespace std;struct Node {    long value;    int countN;};vector<Node> arr(70);vector<long> primeArr;long N;long isPrime(long n){    if(n==2)        return 1;    for(long i=2;i<=sqrt(n);i++){        if(n%i==0){            return 0;        }    }    return 1;}void findPrime(long n){    for(long i=2;i<=n;i++){        if(isPrime(i)){            primeArr.push_back(i);        }    }}int main(){    cin>>N;    if(N==1){        cout<<"1=1";        return 0;    }    long cp = N;    findPrime(10000);    int index = 0;    for(long i=0;i<primeArr.size();i++){        if(N%primeArr[i]==0){            if(index==0){                arr[index].value = primeArr[i];                arr[index].countN++;            }else{                if(primeArr[i]==arr[index].value){                    arr[index].countN++;                }else{                    arr[++index].value = primeArr[i];                    arr[index].countN++;                }            }            N /= primeArr[i];            i--;            if(N==1){                break;            }        }else{            if(arr[index].countN>0){                index++;            }        }    }    cout<<cp<<"=";    for(int i=0;i<index;i++){        if(arr[i].countN==1){            cout<<arr[i].value<<"*";        }        if(arr[i].countN>1){            cout<<arr[i].value<<"^"<<arr[i].countN<<"*";        }    }    if(arr[index].countN==1){            cout<<arr[index].value;        }        if(arr[index].countN>1){            cout<<arr[index].value<<"^"<<arr[index].countN;        }    return 0;}


 

0 0