1059. Prime Factors (25)

来源:互联网 发布:extjs表单设计器源码 编辑:程序博客网 时间:2024/06/03 21:03

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 <cstring>#include <cstdlib>#include <cstdio>#include <cmath>#include <vector>using namespace std;bool isprime(long long n,long long &factor){for(long i=factor;i<=sqrt(n);i++){if(n%i==0){factor=i;return false;}}return true;}int main(){long long n;scanf("%lld",&n);long long save=n;if(n<=3) {printf("%lld=%lld",n,n);return 0;}vector<long long>fac;vector<long long>exp;long long factor=2;while(true){bool flg=isprime(n,factor);if(flg) break;else{fac.push_back(factor);n=n/factor;long long count=1;while(n%factor==0){count++;n=n/factor;}exp.push_back(count);}if(n==1) break;}printf("%lld=",save);for(int i=0;i<fac.size();i++){printf("%lld",fac[i]);if(exp[i]>=2) printf("^%lld",exp[i]);if(i<fac.size()-1) printf("*");}if(n!=1) printf("*%lld",n);}


0 0