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
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
题意
输入一串长数,输出其质因子的乘积形式,多个相同质因子用其幂的形式表示。
注意第4个测试点为特殊点1,需要单独讨论。
代码
#include <iostream>
#include <map>
#include <cmath>
using namespace std;
map<long int,long int> p;
bool isprime(long int n) { //判断素数
if(n<=1) return false;
long int sqr=(long int)sqrt(1.0*n);
for(long int i=2; i<=sqr; i++) {
if(n%i==0) return false;
}
return true;
}
int main() {
long int n;
scanf("%ld",&n);
printf("%ld=",n);
if(n==1) printf("1");
for(long int i=2; i<=n;) {
if(isprime(i)!=0 && n%i==0) {
n=n/i;
p[i]++;
} else {
i++;
}
}
for(auto it=p.begin(); it!=p.end();) {
printf("%ld",it->first);
if(it->second!=1) printf("^%ld",it->second);
if(++it!=p.end()) printf("*");
}
return 0;
}