#23573: 因數分解程式說明


chi98chi98@gmail.com (alex alex)

學校 : 不指定學校
編號 : 139206
來源 : [1.172.116.51]
最後登入時間 :
2020-11-29 01:31:42
a010. 因數分解 | From: [1.172.116.51] | 發表日期 : 2020-11-29 02:21

因數分解

 

#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印出來

    }

}

 

 
ZeroJudge Forum