思路:先找出素数,然后分别判断是否为其因子。
坑点:1、输入为1时单独输出。
AC代码如下
#include <iostream>
#include <cmath>
using namespace std;
const int max_n = 100010;
bool is_prime(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;
}
int prime[max_n], pnum = 0;
void Find_prime(){
for(int i =1; i <= max_n;i++){
if(is_prime(i) == true){
prime[pnum++] = i;
}
}
}
struct factor{
int x,cnt;
} fac[10];
int main(){
Find_prime();
int n, num =0;
cin>>n;
if(n == 1) cout<<"1=1";
else{
cout<<n<<"=";
int sqr = (int)sqrt(1.0 * n);
for(int i = 0;prime[i] <= sqr ; i++){
if(n % prime[i] == 0){
fac[num].x = prime[i];
fac[num].cnt = 0;
while(n % prime[i] == 0){
fac[num].cnt++;
n /= prime[i];
}
num++;
}
if(n == 1) break;
}
if(n != 1){
fac[num].x = n;
fac[num++].cnt = 1;
}
for(int i = 0; i < num; i++){
if(i > 0 ) cout<<"*";
cout<<fac[i].x;
if(fac[i].cnt > 1) cout<<"^"<<fac[i].cnt;
}
}
return 0;
}