这道题目的测试集有点弱,我没写41-43行代码也能通过所有测试点,但其实连6=2×3, 14=2×7这种比较简单的问题,答案也是错误的。
#include <cstdio>
#include <cmath>
#include <map>
long N, a;
std::map<int, int> mp;
bool isPrime(int p){
if(p == 1){
return false;
}
if(p == 2 || p == 3){
return true;
}
int sqr = (int)sqrt(p * 1.0);
for(int i = 2; i <= sqr; ++i){
if(p % i == 0){
return false;
}
}
return true;
}
int main(){
scanf("%ld", &N);
a = N;
if(isPrime(a) || a == 1){
printf("%ld=%ld", a, a);
return 0;
}
int sq = (int) sqrt(a * 1.0);
for(int i = 2; i <= sq; ++i){
while(a % i == 0){
mp[i]++;
a /= i;
}
if(a == 1){
break;
}
}
if(isPrime(a)){
mp[a]++;
}
printf("%ld=", N);
for(auto it = mp.begin(); it != mp.end(); ++it){
if(it != mp.begin()){
printf("*");
}
printf("%d", it->first);
if(it->second != 1){
printf("^%d", it->second);
}
}
return 0;
}
题目如下:
Given any positive integer N, you are supposed to find all of its prime factors, and write them in the format N = p1k1×p2k2×⋯×pmkm.
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