正整數的因子與質因子

2021-07-16 06:58:38 字數 1210 閱讀 4666

給定乙個正整數,求其所有因子與質因子。所給正整數不超過long型別的最大表示範圍。

[1, 60, 2, 30, 3, 20, 4, 15, 5, 12, 6, 10]

[2, 3, 5]

/**

* * 理論: 首先明確幾個數學概念和結論

* 1.乙個數的自身和1都是其因子;

* 2.乙個數的因子總是成對出現num=m*n;

* 3.如果m不等於n,則m和n必定分別位於區間[1, sqrt(num))和(sqrt(num),num]

* * 只需要在2<=i<=sqrt(num))範圍之內判斷i是否是num的因子即可

* */

public

static arraylistgetfactors(long n)

}return list;

}

/**

* * 理論: 首先明確幾個數學概念和結論

* 1.奇數必定沒有偶數因子;

* 2.所有質數(除了2)都是奇數;

* 3.正整數分為質數、合數和1,任一合數必定可以寫成若干個質數因子之積(可能會有重複質因子,比如12=2*2*3);

* * 從質數2開始,尋找目標整數num的因子(能整除num就是因子),如果當前因子出現多次,

* 那麼都記錄下來,且每次都從num中除去該因子,從而每次得到的因子必定是質因子。

* 因為合數因子本身必定可以寫成若干個質數因子之積,而我們是從最小的質數開始尋找, 所以如果能被num整除,則一定是質因子。

* * 比如num=12,其因子有1、2、3、4、6、12,其中質因子有2和3 由於4=2*2 ,6=2*3,所以當i=4或6時,num%i != 0

* */

public

static arraylistprimefactors(long num)

}// 此時num必定已經是奇數,只需要檢驗奇數是不是num的質因子

// 如果i是num的因子,則必定是質因子,記錄之

// 如果i不是num的因子,則在下一輪迴圈中檢驗下乙個奇數i+2是不是num的因子

for (long i = 3; i <= num; i += 2) }}

return list;

}

求正整數的質因子 因子個數 所有因子之和

質因子分解,輸入乙個int型正整數,輸出其分解為質因數的乘法算式。include include const int maxn 100010 bool is prime int n return 0 最後指出,如果要求乙個正整數n的因子個數,只需要對其質因子進行分解,得到質因子pi的個數分別為e1,...

質因子分解

今天沒事做,我們來寫個部落格,混混等級!我們以求數的質因子的個數為例來講解。對於質因子分解最簡單最純粹的暴力我相信大家都會的。int getnum int x return ans 但是當處理的資料比較多,而且範圍也比較大的時候顯然這種方式就不再那麼適合了。既然我們是分解質因子,那麼我們就可以先預處...

質因子分解

這個東西會在程式執行結尾提示 press any key to continue 用以結束程式。貴在那裡?讓我們來看看system pause 的流程 1 暫停你的程式 2 在sub process中啟動os 3 尋找要執行的命令並為之分配記憶體 4 等待輸入 5 記憶體 6 結束os 7 繼續你的...