最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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ù)?的評論 (共 條)

分享到微博請遵守國家法律
南宁市| 扶绥县| 溧阳市| 炉霍县| 班玛县| 保康县| 冷水江市| 石景山区| 门头沟区| 观塘区| 乌什县| 旌德县| 绥芬河市| 积石山| 玉环县| 朝阳区| 靖西县| 墨竹工卡县| 临夏市| 江永县| 黎川县| 柏乡县| 宣威市| 沅陵县| 额济纳旗| 碌曲县| 图木舒克市| 昆明市| 肇东市| 石嘴山市| 池州市| 墨竹工卡县| 祁连县| 当涂县| 岳西县| 昌吉市| 赤城县| 江达县| 远安县| 龙口市| 界首市|