-
题目要求如下:
-
Sample Input:
97532468 -
Sample Output
97532468=2^211171011291
-
-
注意点:
- findprime和isprime函数要熟练
- 注意特例:num==1的情况
- 注意存在质因子>sqrt的情况,就是num本身了
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;
typedef long long LL;
const int maxn = 100010;
int prime[maxn] = {0}, pNum = 0;
//1.判断是否是prime 2.建立<=sqr的prime数组 3.循环枚举
bool isprime(int n)
{
if(n == 1)
return false;
int sqr = (int)sqrt(1.0 * n);
for(int i = 2; i <= sqr; i++)
if(n % i == 0)
return false;
return true;
}
void findprime()
{
for(int i = 1; i < maxn; i++)
if(isprime(i) == true)
prime[pNum++] = i;
}
struct factor
{
int x, cnt;
} fac[10];
int main()
{
LL num;
int acn = 0;
findprime();
cin >> num;
// for(int i = 0; i < pNum; i++)
// {
// cout << prime[i] << " ";
// }
if(num == 1)
cout << num << "=" << num;
else
{
cout << num << "=";
int sqr = (int)sqrt(num);
for(int i = 0; i < pNum && prime[i] <= sqr; i++)
{
if(num <= 1)
break;
if(num % prime[i] == 0)
{
fac[acn].x = prime[i];
fac[acn].cnt = 0;
while(num % prime[i] == 0)
{
fac[acn].cnt++;
num /= prime[i];
}
acn++;
}
}
if(num != 1)
{
fac[acn].x = num;
fac[acn++].cnt = 1;
}
}
for(int i = 0; i < acn; i++)
{
if(i != 0)
cout << "*";
cout << fac[i].x;
if(fac[i].cnt > 1)
cout << "^" << fac[i].cnt;
}
return 0;
}