题目大意:输出正数N的质因数分解,如果质因数的指数大于1,要按照底数^幂的形式输出。
因为要输出幂,在找质因数的同时要记录该质因数出现的次数,可以用map<int,int>,每次找到一个质因数K, 令 N /= K,开始下一次循环,直到 N <= 1为止。
坑点在于 N = 1的情况需要特判输出 1=1(测试点3)。
AC代码:
#include <cstdio>
#include <cmath>
#include <map>
using namespace std;
bool isPrime(int n)
{
if(n == 1) return false;
for (int i = 2; i <= sqrt(n); ++i)
{
if(n % i == 0) return false;
}
return true;
}
int main()
{
map<int, int> mp;
int N;
scanf("%d", &N);
printf("%d=", N);
if(N == 1) printf("1");
else
{
while(N > 1)
{
for (int i = 2; i <= N; ++i)
{
if(isPrime(i) && N % i == 0)
{
mp[i]++;
N /= i;
break;
}
}
}
for(map<int,int>::iterator it = mp.begin(); it != mp.end();)
{
if(it->second > 1) printf("%d^%d", it->first, it->second);
else printf("%d", it->first);
if(++it != mp.end()) printf("*");
}
}
return 0;
}

这篇博客详细介绍了如何解决PAT(A1059)问题,涉及素数因数分解的算法。文章指出,需要记录质因数的出现次数,并在找到质因数后除以该质因数,直至N小于等于1。特别地,当N为1时,需要特殊处理输出1=1,以通过测试点3。
1920

被折叠的 条评论
为什么被折叠?



