最高科技——快速枚舉約數

來源:互聯網
上載者:User

標籤:c   演算法   時間   應用   字串   方法   

求數\(n\)的最小的約數\(r\),使\(r\)滿足性質\(P\),這些性質滿足這樣的一個條件:若有\(d|r\)滿足性質\(P\),則有\(r\)也滿足\(P\)。

首先\(O(\sqrt{n})\)直接暴力枚舉因數顯然可行,然而我們有更快的方法。

設\(n=p_1^{k_1}p_2^{k_2}\ldots p_m^{k_m}\)

我們先從大到小枚舉數\(w_1\),使其成為最小的\(w_1\)使得\(t=p_1^{w_1}p_2^{k_2}\ldots p_m^{k_m}\)滿足\(P\)。

再枚舉\(w_2\),使其成為最小的\(w_2\)使得\(t=p_1^{w_1}p_2^{w_2}\ldots p_m^{k_m}\)滿足\(P\)。

一直枚舉,得到數\(t=p_1^{w_1}p_2^{w_2}\ldots p_m^{w_m}\),即為最終的答案。

正確性由性質的性質顯然,不計因式分解,則總時間複雜度為\(O(\lg n \cdot P)\)。

 

這個方法的應用暫且知道兩個:

一是求原根,枚舉約數時直接改為上面的方法,驗證一個數的時間降為\(O(\lg^2 n)\)。

二是求字串的最小迴圈節,將本來的枚舉約數改為上述演算法,那就只用枚舉\(O(\lg n)\)種長度。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.