因數分解
#include <iostream>
#include <cmath>
using namespace std;
int main(void)
{
int num;
bool st=true; //判斷要不要印出”*”
cin >> num; //輸入一個數
int k=sqrt(num); //求因數時,除數的範圍
int divisor = 2, count=0; //除數=2,次方=0
while(num % divisor == 0) //當num能被2整除時
{
num /= divisor; //num=num/2
count++; //次方+1
}
if(count !=0) //當次方不等於0時,才要印出2的幾次方
{
if(count == 1) cout << divisor; //如果1次方只要印出2
else cout << divisor << '^' << count; //否則(2次方以上)要印出”^”和次方
}
else st=false; //當次方等於0時,設st=false,不要印出”* ”
if(num!=1) //如果num不是1時(要再判斷是否還有其它質因數)
{
for(divisor=3;divisor<=k;divisor+=2) //質因數從3開始往後找其它奇數
{
count=0; //要把先前的次方清為0
if(st==true && num!=1) cout<<" * "; //當前面的次方不為0且num不等於1,要印出*
st=true; //恢復st為true
while(num % divisor == 0) //當num能被奇數divisor整除時
{
num /= divisor; // num=num/divisor
count++; // 次方+1
}
if(count !=0) //當次方不等於0時,才要印出divisor的幾次方
{
if(count == 1) cout << divisor; //如果1次方只要印出divisor
else cout << divisor << '^' << count; //否則(2次方以上)要印出”^”和次方
}
else st=false; //當次方等於0時,設st=false,不要印出”* ”
}
if(num>1) cout<<num; //最後沒有其它質因數,且num>1,要把num印出來
}
}