五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

深入算法: 如何快速求一個數(shù)的所有因子數(shù)?

2022-12-02 11:34 作者:StepfenShawn  | 我要投稿

如何編寫一個求一個數(shù)所有因子的程序呢??假設這個數(shù)是2000, 相信大家很快就可以寫出如下代碼:

上面程序可以正確地得出答案,該程序的時間復雜度為O(n), 2000次循環(huán)對cpu來說也只是幾毫秒的事情,但如果將 n 擴大為一個16位的整數(shù), 計算機就可能要算上一天了。。。

如何進行優(yōu)化呢,這就要開始研究因子數(shù)的數(shù)學性質(zhì)了!?下面我們就來從0開始證明一個數(shù)與其因子數(shù)存在什么性質(zhì):

先假設自然數(shù)?N, 我們要求出它所有因子的集合%5Cleft%5C%7B%201%2C%20x1%2C%20x2%2C%20...%2C%20N%20%5Cright%5C%7D%20,我們需要證明兩個命題成立即可:

命題1: 因子是成對出現(xiàn)的: 如果?自然數(shù)?N?存在一個因子?x1, 那么必然存在另一個因子?x2使得?x1%20*%20x2%20%3D%20N?(注意這里如果 N 是平方數(shù)的話?x1可以等于x2)。

證明: 已知 x1%20%7C%20N, 要證明該命題成立我們只需證明 %5Cfrac%7BN%7D%7Bx1%7D%20%20%7C%20N%20即可, 由 ?x1%20%7C%20N,?我們知?N 可以分解成一個數(shù)字 x1?和另一個數(shù)字 m, 又因為 x2%20%3D%20%5Cfrac%7BN%7D%7Bx1%7D%20%20%3D%20m, 所以 %20x2%20%7C%20N。?

題外話: 上述證明只是從直觀上來出發(fā),如何用反證法來證明呢,可以先假設另一個數(shù)字 m 不能整除 N, 那么最后會推出 x1 是不能整除 N 的,??而與條件x1%20%7C%20N?產(chǎn)生矛盾, 所以 m 一定會整除 N?.

(這個方法的證明思路就放在這里了,過程交給讀者了)

命題2:因數(shù)是成對出現(xiàn)的(上面已證明),一個小于等于算數(shù)平方根,另外一個大于等于算數(shù)平方根

證明: 我們利用反證法證明簡單地這個命題,假設我們找到了一個因子 x1?小于?%5Csqrt%7BN%7D%20 , 如果存在另一個因子 x2?也小于?%5Csqrt%7BN%7D%20?, 那么?x1%20*%20x2%20%3C%20N, 那么 因子 x1?與其成對的因子必然不是 x1。假設我們找到了一個因子 x1?大于?%5Csqrt%7BN%7D%20?, 如果存在另一個因子?x2?也大于?%5Csqrt%7BN%7D%20?,?那么?x1%20*%20x2%20%3E%20N, 那么因子 ?與其成對的因子必然不是 x2。 所以一對因子唯一的可能就是一個小于等于%5Csqrt%7BN%7D%20?,另外一個大于等于%5Csqrt%7BN%7D%20? 。?

最后我們來證明等于的情況,? 我們只需要找到?一個因子 x1 = x2,?使得?x1 * x2?= N,?這只有 N 是平方數(shù)的情況下成立。

那么我們就可以開始寫代碼了,由命題2可以得到,由于因子都是成對出現(xiàn)的我們只需要循環(huán)到?%5Csqrt%7Bn%7D%20 就可以找到所有因子了!

那么我們就把該算法從時間復雜度O(n) 優(yōu)化到 O(%5Csqrt%7Bn%7D%20)了:


?

深入算法: 如何快速求一個數(shù)的所有因子數(shù)?的評論 (共 條)

分享到微博請遵守國家法律
绍兴县| 鄯善县| 镇赉县| 西林县| 陈巴尔虎旗| 报价| 林芝县| 永寿县| 宁强县| 岐山县| 贵定县| 合山市| 昌邑市| 彭州市| 凤庆县| 冀州市| 白沙| 白朗县| 永善县| 志丹县| 三明市| 永福县| 九江市| 平江县| 德兴市| 武鸣县| 南城县| 揭西县| 宜丰县| 东莞市| 屏东市| 平昌县| 曲阜市| 张家港市| 民权县| 巨鹿县| 德令哈市| 宿迁市| 喀喇沁旗| 宜都市| 冕宁县|