#include<bits/stdc++.h> using namespace std; #define max 100001 struct zhishu{ int n,cnt; }fac[10]; bool jud(int); void show(); int cnt_sushu = 0,sushu[max] = { }; int main(){ show(); int n,tmp_n,cntF = 0,fin[20] = { },finall = 0; cin>>n; tmp_n = n; if(n==1) cout<<"1=1"; else{ // cout<<n<<"="; int op = (int)sqrt(1.0*n); for(int i = 0;i < cnt_sushu && i <= op ; i++ ){ if( n % sushu[i] == 0 ){ fac[cntF].n = sushu[i]; fac[cntF].cnt = 0; while( n % sushu[i] == 0){ fac[cntF].cnt++; n/=sushu[i]; } cntF++; } if( n == 1 )break; } if(n!=1){ fac[cntF].n = n; fac[cntF].cnt = 1; } // for(int i = 0;i<cntF;i++)cout<<fac[i].n<<"--->"<<fac[i].cnt<<endl; for(int i = 0;i<cntF;i++){ if(fac[i].n != 0){ fin[finall++] = fac[i].n; fac[i].cnt--; } if(fac[i].cnt > 0 ){ while(fac[i].cnt--)fin[finall++] = fac[i].n; } } cout<<tmp_n<<"="; for(int i = 0;i<finall;i++){ if(i==finall-1)cout<<fin[i]; else cout<<fin[i]<<'*'; } // for(int i = 0;i<finall;i++)cout<<fin[i]<<" "; // for(int i = 0;i<cntF;i++){ // if(i>0) cout<<'*'; // cout<<fac[i].n; // if(fac[i].cnt>1) // cout<<'^'<<fac[i].cnt; // } } return 0; } void show(){ for(int i = 2;i<max;i++){ if(jud(i))sushu[cnt_sushu++] = i; } } bool jud(int n){ if(n == 1)return false; int op = (int)(sqrt(1.0*n)); for(int i = 2;i <= op;i++){ if( n % i == 0 ) return false; } return true; } |
Double click to view unformatted code.