Lucas定理 以及 C

來源:互聯網
上載者:User

標籤:

最近碰到一題,問你求mod (p1*p2*p3*……*pl) ,其中n和m資料範圍是1~1e18 , l ≤10 , pi ≤ 1e5為不同的質數,並保證M=p1*p2*p3*……*pl ≤ 1e18 。

要解決這個問題首先需要Lucas定理 或者 C!解法。

Lucas定理:

我們令n=sp+q , m=tp+r . q , r ≤ p

那麼,然後你只要繼續對調用Lucas定理即可。

代碼可以遞迴的去完成這個過程,其中遞迴終點為t = 0 ;

虛擬碼,時間O(logp(n)*p):

int Lucas (ll n , ll m , int p) {        return m == 0 ? 1 : 1ll*comb (n%p , m%p , p) * Lucas (n/p , m/p , p) %  p ; }//comb()函數中,因為q , r ≤ p , 所以這部分暴力完成即可。

 Lucas定理證明:

證明資料:http://www.cut-the-knot.org/arithmetic/algebra/LucasTheorem.shtml

首先你需要這個算式:,然後

(1 + x) n Ξ (1 + x) sp+q  Ξ ( (1 + x)p)s • (1 + x) q Ξ (1 + xp) s • (1 + x) q   (mod p) ;

.

所以,通過左右係數比較,你就會發現,及i=t , j=r的時候。

 

Lucas定理 以及 C

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.