HDU3037 Lucas定理求大組合數取模

2021-08-04 05:43:35 字數 720 閱讀 2989

題意:給你三個數,n,m,p,n是樹的個數,m是最多拿的果子,p是最後求的數取模p,問有幾種拿果子的方法。這樣一看這個題就是乙個找規律的題,其實可以把這個題合併起來,樹的個數是n,可以把最多拿的果子看作樹,然後每個樹上拿乙個果子,問這m個果子的拿法。

用個辦法來分析這道題目,最終知道這道題其實就是讓你輸出cm

n+m

lucas定理的解析傳送門

這裡我用的是費馬小定理求逆元的方法

直接上**:

#include

#include

#include

#include

using

namespace

std;

long

long p,m1,n1;

long

long pow(long

long a,long

long b)

b>>=1;

a=(a*a)%p;

}return ans;

}long

long c(long

long n,long

long m)

return (a*pow(b,p-2))%p;

}long

long lucas(long

long n,long

long m)

int main()

hdu 3037(lucas定理求大組合數取模)

下面簡單介紹一下lucas定理 lucas定理是用來求 c n,m mod p的值,p是素數 從n取m組合,模上p 描述為 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...

hdu 3037 插板法組合 lucas定理

插板法解決的問題 a1 a2 a3 an m 如果a i 必須是正整數,cn 1m 1 如果a i 是非負數,先強制選 1 轉化為正整數cn 1m 1 n擴充套件,對於每個數最小為多少都可以通過先強行加減的方法把它轉化為,正整數問題。lucas定理 解決cm n mo d 的計算。本題就是插板法列出...

HDU 3037 隔板法 組合數 Lucas

題意 求在n棵樹上摘不超過m顆豆子的方案數,結果對p取膜。思路 其實就相當於把i 0 i m 個球放入n個不同的盒子裡,盒子可以為空。很明顯,需要用到隔板法。所以對於i個球,方案數為c i n 1,n 1 總方案數為c n 1,n 1 c n,n 1 c n m 1,n 1 然後根據公式c n,m ...