盧卡斯定理

盧卡斯定理:解決一類組合數取模問題

A、B是非負整數,p是質數。AB寫成p進制:A=a[n]a[n-1]...a[0],B=b[n]b[n-1]...b[0]。

則組合數C(A,B)與C(a[n],b[n])*C(a[n-1],b[n-1])*...*C(a[0],b[0])??modp同余

即:Lucas(n,m,p)=c(n%p,m%p)*Lucas(n/p,m/p,p)?

這個是單獨處理n!的情況,當然C(n,m)就是n!/(m!*(n-m)!),每一個階乘都用上面的方法處理的話,就是Lucas定理了,注意這兒的p是素數是有必要的。

Lucas最大的數據處理能力是p在10^5左右,不能再大了,hdu 3037就是10^5級別的!

對于大組合數取模,n,m不大于10^5的話,用逆元的方法,可以解決。對于n,m大于10^5的話,那么要求p<10^5,這樣就是Lucas定理了,將n,m轉化到10^5以內解。

?

模板:

/*
Lucas定理 C(n,m)%p(p為素數)
C(n,m)與C(a[n],b[n])*C(a[n-1],b[n-1])*C(a[n-2],b[-2])*....*C(a[0],b[0])模p同余
a,b 是n,m在p進制下的數
有的推公式: (C(n%p,m%p,p)*Lcs(n/p,m/p,p))%p;
關鍵是求 C(n%p,m%p,p) 遞歸會很慢 for的話會爆掉
這里用一個定理:a/b%p <--> a*x%p  x為b在b%p下的逆元
再來一個定理:x=b^(p-2)   x為b在%p下的逆元  p為素數
然后預處理一下階乘就ok了 
*/
#include<iostream>
#include<cstdio>
#include<cstring>#define N 1001using namespace std;
int f[N];int Mi(int a,int b,int p)
{int res=1;while(b){if(b&1) res=res*a%p;b>>=1;a=a*a%p;}return res;
}int C(int n,int m,int p)
{if(m>n)return 0;return  f[n]*Mi(f[m]*f[n-m],p-2,p)%p;
}int Lus(int n,int m,int p)
{if(m==0) return 1;return (C(n%p,m%p,p)*Lus(n/p,m/p,p))%p;
}int main()
{int n,m,p;scanf("%d%d%d",&n,&m,&p);f[0]=1;for(int i=1;i<=p;i++)f[i]=f[i-1]*i%p;printf("%d\n",Lus(n,m,p));
}

?

hdu3037?http://acm.hdu.edu.cn/showproblem.php?pid=3037

題目大意:求在n棵樹上摘不超過m顆豆子的方案,結果對p取模。

思路:題目可以轉換成 ?x1+x2+……+xn=m 有多少組解,m在題中可以取0~m。

利用插板法可以得出x1+x2+……+xn=m解的個數為C(n+m-1,m);

則題目解的個數可以轉換成求 ? sum=C(n+m-1,0)+C(n+m-1,1)+C(n+m-1,2)……+C(n+m-1,m)

利用公式C(n,r)=C(n-1,r)+C(n-1,r-1) ?== > ?sum=C(n+m,m)。

就是要求C(n+m,m)%p。

#include<iostream>
#include<cstdio>
#include<cstring>#define N 100007using namespace std;
long long f[N];long long Mi(long long a,long long b,long long p)
{long long res=1;while(b){if(b&1) res=res*a%p;b>>=1;a=a*a%p;}return res;
}long long C(long long n,long long m,long long p)
{if(m>n)return 0;return  f[n]*Mi(f[m]*f[n-m],p-2,p)%p;
}long long Lcs(long long n,long long m,long long p)
{if(m==0)return 1;return (C(n%p,m%p,p)*Lcs(n/p,m/p,p))%p;
}int main()
{long long n,m,p;long long t;        cin>>t;while(t--){cin>>n>>m>>p;f[0]=1;for(long long i=1;i<=p;i++)f[i]=f[i-1]*i%p;printf("%lld\n",Lcs(n+m,m,p));}return 0;
}
Code

?

轉載于:https://www.cnblogs.com/L-Memory/p/7352397.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/253764.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253764.shtml
英文地址,請注明出處:http://en.pswp.cn/news/253764.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

內核理解

在純技術方面&#xff0c;內核是硬件與軟件之間的一個中間層。其作用是將應用程序的請求傳遞給硬件&#xff0c;并充當底層的驅動程序&#xff0c;對系統中的各種設備和組件。內核啟動init程序作為第一個進程&#xff0c;該進程負責進一步的系統初始化操作&#xff0c;并顯示登…

loadrunner中對https證書的配置

1、準備好網站的證書&#xff0c;一般證書是cer格式&#xff1b; 2、因為loadrunner只支持pem格式的證書&#xff0c;所以要將證書轉換格式&#xff0c;利用openssl工具&#xff1b;&#xff08;或者直接讓開發提供pem格式的證書&#xff09;3、得到pem格式的證書之后&#xff…

Android 9 Pie震撼來襲 同步登陸WeTest

作者&#xff1a;We Test小編商業轉載請聯系騰訊WeTest獲得授權&#xff0c;非商業轉載請注明出處。原文鏈接&#xff1a;wetest.qq.com/lab/view/40…WeTest 導讀2018年8月7日&#xff0c;Google對外發布最新 Android 9.0 正式版系統&#xff0c;并宣布系統版本Android P 被正…

Datapath綜合代碼規范(Verilog)

一、一般準則 1、有符號數運算 利用類型“signed”完成有符號數運算&#xff0c;而不是用無符號數模擬有符號數運算。這樣可以得到更好的QoR。在資源報告中檢查操作數的類型和大小。 2、符號/零擴展 盡量不要手動擴展。verilog利用signed/unsigned會自動完成擴展。這樣代碼可…

Linux下V4L2編程小結

http://www.360doc.com/content/12/0318/16/532901_195392228.shtml :davind dm365linux移植 http://www.embedhq.org/html/jsbw/2010/0425/390.html :Linux下V4L2編程小結

百(垃)度(圾)之星初賽B hdu6114

Chess 題意&#xff1a;中文題 思路&#xff1a;其實就是在n個格子上放m個棋子&#xff08;n>m&#xff09;&#xff08;xjb套Lucas的板子... AC代碼&#xff1a; #include "iostream" #include "string.h" #include "stack" #include "…

variable 'xxx' unsafe in 'case'的處理

問題描述&#xff1a; case get(?Player_LoopTaskInfo) of{TargetCnt, TaskStar, TaskExp} ->ok;_ ->throw("not_found_loop_task_info") end 在case語句中&#xff0c;這樣寫&#xff0c;編譯時&#xff0c;會提示變量unsafe&#xff0c;解決編譯器報錯的…

SDUT 3347 數據結構實驗之數組三:快速轉置

數據結構實驗之數組三&#xff1a;快速轉置 Time Limit: 1000 ms Memory Limit: 65536 KiBProblem Description 轉置運算是一種最簡單的矩陣運算&#xff0c;對于一個m*n的矩陣M( 1 < m < 10000,1 < n < 10000 )&#xff0c;它的轉置矩陣T是一個n*m的矩陣&…

linux設備和驅動加載的先后順序

Linux驅動先注冊總線&#xff0c;總線上可以先掛device&#xff0c;也可以先掛driver&#xff0c;那么究竟怎么控制先后的順序呢。 Linux系統使用兩種方式去加載系統中的模塊&#xff1a;動態和靜態。 靜態加載&#xff1a;將所有模塊的程序編譯到Linux內核中&#xff0c;由do_…

CMOS 圖像傳感器——Skipping 和 Binning 模式

在通常的CMOS讀取方式中&#xff0c;由于像素讀取規模的差異&#xff0c;不同的分辨率對應不同的幀率。在通道帶寬固定的前提下&#xff0c;想要提高幀率就要考慮是否需要縮小視野&#xff08;外圈裁切&#xff09;。若不希望視野縮小&#xff0c;需要減少采樣的分辨率。 常用的…

DAVINCI DM365-368中 linux-2.6.32的移植

http://www.360doc.com/content/12/0318/16/532901_195392228.shtml 很詳細的一篇文章&#xff0c;在此感謝了&#xff01; http://www.rosoo.net/a/201001/8316.html DM系列芯片外設詳細介紹

Jacoco--測試覆蓋率工具

介紹JaCoCo&#xff08;Java Code Coverage&#xff09;是一種分析單元測試覆蓋率的工具&#xff0c;使用它運行單元測試后&#xff0c;可以給出代碼中哪些部分被單元測試測到&#xff0c;哪些部分沒有沒測到&#xff0c;并且給出整個項目的單元測試覆蓋情況百分比&#xff0c;…

HTML 標記大全參考手冊

1.文件結構 文件類型 <HTML></HTML> &#xff08;放在文檔的開頭與結尾&#xff09; 文件主題 <TITLE></TITLE> &#xff08;必須放在「文頭」區塊內&#xff09; 文頭 <HEAD></HEAD> &#xff08;描述性資料&#xff0c;如「主題」&#…

APB協議學習

APB(Advanced Peripheral Bus) 1、APB的概述與特點 APB主要用于低帶寬的周邊外設之間的連接&#xff0c;例如UART、1284等&#xff0c;它的總線架構不像AHB支持多個主模塊&#xff0c;在APB里面唯一的主模塊就是APB 橋。其特性包括&#xff1a;兩個時鐘周期傳輸&#xff1b;無…

私有協議棧開發

通信協議從廣義上區分&#xff0c;可以分為公有協議和私有協議。由于私有協議的靈活性&#xff0c;它往往會在某個公司或者組織內部使用&#xff0c;按需定制&#xff0c;也因為如此&#xff0c;升級起來會非常方便&#xff0c;靈活性好。絕大多數的私有協議傳輸層都基于TCP/IP…

制作NFS

最近學習NFS&#xff0c;用本地測試. 以下是我的測試過程 環境 ubuntu 10.4 vm 7.1 終端 ifconfig 得到 ubuntu資料 INET ADDR 192.168.0.4 BCAST 192.168.0.255 MASK 255.255.255.0 一 安裝NFS $ sudo apt-get install nfs-kernel-server $ sudo apt-get install nfs…

【筆記篇】C#筆記2

返回目錄&#xff1a;目錄請戳這里~ C#數組 基本概念不提。。int[] a; bool[] b new bool[10]; float[] c {0.5, 57.0, 233.3, 12345.67 }; double[] d new double[/*3*/]{233.33, 1926.0817, 4396.0 }; 然后數組和指針有很大的不同。。。 Array類不會用…… 有多維數組和…

SFB 項目經驗-51-某上市企業2千人Exchange 2013升級2016高可用之傷01

SFB 項目經驗-51-某上市企業2千人Exchange 2013升級2016高可用之傷01&#xff08;帶病撰寫項目實戰筆記&#xff09;問題描述&#xff1a;2000人企業使用Exchange 2013郵件服務器標準版&#xff0c;n年!1&#xff09;問題1&#xff1a;標準版僅支持5個郵箱數據庫。2&#xff09…

數字圖像處理——2D降噪

圖像降噪處理主要分為2D&#xff08;空域&#xff09;與3D降噪&#xff08;時域/多幀&#xff09;&#xff0c;而2D降噪由于相關的實現算法豐富&#xff0c;效果各異&#xff0c;有著豐富的研究價值。理解2D降噪算法的流程&#xff0c;也對其他的增強算法有很大的幫助&#xff…

項目開發(Require + E.js)

最近在做的幾個項目&#xff0c;分別用了不同的框架跟方式&#xff0c;有個H5的項目&#xff0c;用了vue框架&#xff0c; 這個項目我還沒有正式加入進去&#xff0c; 等手頭的這個項目完成就可以去搞vue了&#xff0c; 現在手頭的這個項目是一個招聘的項目&#xff0c; 用到了…