日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(组合数求模=乘法逆元+快速幂) Problem Makes Problem

發布時間:2025/3/12 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (组合数求模=乘法逆元+快速幂) Problem Makes Problem 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目:

As I am fond of making easier problems, I discovered a problem. Actually, the problem is ‘how can you make n by adding k non-negative integers?’ I think a small example will make things clear. Suppose n=4 and k=3. There are 15 solutions. They are

  • 0 0 4
  • 0 1 3
  • 0 2 2
  • 0 3 1
  • 0 4 0
  • 1 0 3
  • 1 1 2
  • 1 2 1
  • 1 3 0
  • 2 0 2

  • 2 1 1

  • 2 2 0

  • 3 0 1

  • 3 1 0

  • 4 0 0

  • As I have already told you that I use to make problems easier, so, you don’t have to find the actual result. You should report the result modulo 1000,000,007.

    Input
    Input starts with an integer T (≤ 25000), denoting the number of test cases.

    Each case contains two integer n (0 ≤ n ≤ 106) and k (1 ≤ k ≤ 106).

    Output
    For each case, print the case number and the result modulo 1000000007.

    Sample Input
    4

    4 3

    3 5

    1000 3

    1000 5

    Sample Output
    Case 1: 15

    Case 2: 35

    Case 3: 501501

    Case 4: 84793457

    分析與解答

    b * k ≡ 1 (mod p) 是什么意思?
    就是(b*k)%p=1
    a mod b是什么意思?
    就是a%b
    這兩個所有博客沒人說,但是我不清楚。。

    先看看什么是乘法逆元

    當我們要求(a / b) mod p的值,且 a 很大,無法直接求得a / b的值時,我們就要用到乘法逆元。

    滿足 b * k ≡ 1 (mod p) 的 k 的值就是 b 關于 p 的乘法逆元。

    我們可以通過求 b 關于 p 的乘法逆元 k,將 a 乘上 k 再模 p,即 (a * k) mod p。其結果與(a / b) mod p等價。

    證:
    因為 b * k ≡ 1 (mod p)
    則有 b * k = p* x+1
    得到 k = (p * x + 1) / b
    將 k 代入(a * k) mod p
    得到:
    (a * (p * x + 1) / b) mod p
    =((a * p * x) / b + a / b) mod p
    =[((a * p * x) / b) mod p +(a / b)] mod p
    =[(p * (a * x) / b) mod p +(a / b)] mod p
    =(0 + (a / b)) mod p
    = (a/b) mod p

    1.用歐幾里得擴展求逆元

    ax≡1(modp)
    可以等價的轉化為ax?py=1 ,
    檢查gcd(a,p)是否等于1 ,如果是的話
    套用exgcd解方程
    最后解出x即可
    求出來的x有可能為負數,所以結果進行變化:
    x = (x * (c/gcd) % b + b) % b; 即的a的乘法逆元的解x

    void Euild(ll a, ll b, ll &x, ll &y) {if(0 == b){x = 1, y = 0;return ;}Euild(b, a%b, x, y);ll flag = x;x = y;y = flag - a/b * y; }

    2.用費馬小定理
    費馬小定理:假如p是質數,且gcd(a,p)=1,那么 a^(p-1)≡1(mod p)
    所以a*a^(p-2)≡1(mod p)
    那a^(p-2)就是a的乘法逆元
    可以利用快速冪計算
    2.1那看看什么是快速冪

    3^7 = 3 * 3^2 * 3^4
    (7)10 = (111)2
    ———–4 2 1
    3^15 = 3 * 3^2 * 3^4 * 3^8
    (15)10 = (1111)2
    ———— 8 4 2 1
    3^5 = 3 * 3^2 * 3^4
    (5)10 = (101)2
    ———- 4 2 1

    快速冪求x的y次方代碼:

    int pow_1(int x,int y){//x的y次方 int ren=x;int ans=1;while(y){if(y&1) ans*=ren;//取當前最末位的y,如果是1就繼續乘ren ren*=ren;//下一位ren是當前ren的平方 1 2 4 8,這里8是x^4的平方,不是4的平方 y=y>>1;//y前進一位 }return ans; }

    3.用遞推法On求解

    O(n)求1~n逆元表
    有時會遇到這樣一種問題,
    在模質數p下,求1~n逆元 n< p

    這個問題有種很牛的算法,其基于以下的推導:
    在求i的逆元時
    p%i+[p/i]i=p
    令a=p%i,b=[p/i],則有
    a+bi=p
    a+bi=0(mod p)
    bi=-a(mod p)
    i^-1=-b/a
    也就是說i的逆元為:-[p/i]*(p%i)^-1
    而p%i<i,那么可以從2遞推到n求逆元,在求i之前p%i一定已經求出
    這樣就可以O(n)求出所有逆元了
    (初始化 1^(-1)=1)
    代碼如下

    inv[1] = 1; for (int i = 2; i<MAXN; i++) inv[i]=(long long)(p-p/i)*inv[p%i]%p;

    好了現在我們再看這題

    代碼參考:

    這題一個數拆成m個數相加,拆成的數可以是0,問有這m個數一共有幾種情況,看成是n個小球放到m個盒子里。
    比如四個球放到三個盒子,盒子可以為空,怎么算的我實在不懂,先記住公式吧 方案數就是:C(n+m-1,m-1)
    組合數公式:
    約定f(a)代表a的階乘, C(m,n) = f(m)/(f(n)*f(m-n));
    在本題就是C(n+m-1,m-1) = f(n+m-1)/(f(m-1)f(n));
    本題代碼實現:
    我們打表用數組存一個數的階乘,
    f(m)/(f(n) * f(m-n))%mod=(f(m)/f(n))%mod * (1/f(m-n))%mod
    =f(m) * quick(f(m-1),mod-2) % mod quick(f(n),mod-2) % mod
    a[n+k-1]quick(c,mod-2)%modquick(d,mod-2)%mod

    #include <bits/stdc++.h> #define mod 1000000007 #define ll long long using namespace std; ll a[2000000]; void C()//階乘打表 {memset(a,0,sizeof(a));a[0] = a[1] = 1 ;for(int i = 2 ; i <=2000000;i++)a[i] = a[i-1]*i%mod; } ll quick(ll a , ll b)//快速冪取模 {ll res = 1 ;while(b){if(b&1) res = res * a %mod ;b>>=1;a = a * a %mod ;}return res ; } int main() {int t ;cin>>t;C();for(int cas = 1 ; cas<=t;cas++){ll n , k ;cin>>n>>k;ll c = a[k-1];ll d = a[n];printf("Case %d: ",cas);cout<<a[n+k-1]*quick(c,mod-2)%mod*quick(d,mod-2)%mod<<endl;}return 0; }

    現在做一下推廣

    我們組合數求模的板子

    /* mod=1e6+3 樣例輸入方式: 3 4 2 5 0 6 4 */ //這里直接求出C(M,N)%mod#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<cmath> using namespace std; const int INF=0x3f3f3f3f; typedef long long LL; const int mod=1e6+3; const int maxn=1e6+100; LL fac[maxn],inv[maxn]; LL Pow(LL a,LL b) { LL ans=1; while(b) { if(b&1) ans=(ans*a)%mod; a=(a*a)%mod; b>>=1; } return ans; } int main() { int cas=0; int n,a,b; fac[0]=1; //inv[0]=for(int i=1;i<=1000000;i++) { fac[i]=(fac[i-1]*i)%mod; //對階乘打表 // inv[i]=Pow(fac[i],mod-2); } scanf("%d",&n); while(n--) { scanf("%d%d",&a,&b); long long c=Pow(fac[b],mod-2); long long d=Pow(fac[a-b],mod-2); LL ans=fac[a]*c%mod*d%mod; printf("Case %d: %lld\n",++cas,ans); } return 0; }

    總結

    以上是生活随笔為你收集整理的(组合数求模=乘法逆元+快速幂) Problem Makes Problem的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产亚洲欧美精品久久久久久 | 男人操女人动漫 | 美女啪啪av| 玩弄人妻少妇500系列视频 | 在线播放av网址 | 天天操夜夜草 | 亚洲色成人网站www永久四虎 | 国产91区 | 你懂的在线视频网站 | 污版视频在线观看 | 99热99re6国产在线播放 | 日韩乱码人妻无码系列中文字幕 | 亚洲性自拍 | 一区二区视频在线观看 | 国产www视频| 91一区二区 | 亚洲欧洲一二三区 | 国产精品视频入口 | 国产精品a级 | 国产精品第2页 | 中文无码一区二区三区在线观看 | 男生操女生在线观看 | 国产亚洲久一区二区 | 人与动物2免费观看完整版电影高清 | 国产在线精品视频 | 精品国产高清在线观看 | 三级视频在线播放 | 奇米影视播放器 | 碰在线视频 | 国产精品视频久久久 | 三上悠亚ed2k| 久久人妻免费视频 | 国内激情视频 | 四虎影视精品 | 久久久人人人 | 中文字幕观看 | 蜜桃视频一区二区在线观看 | 在线日韩一区 | 91老司机在线 | 91全免费 | 国产一级影片 | 精产国品一区二区三区 | 日韩三级国产精品 | 中文天堂网 | 欧美黑人啪啪 | 91.xxx.高清在线 | 日本午夜一区二区三区 | 亚洲天堂黄色 | 欧美jizz欧美性大全 | 免费一区二区三区 | 色天天干 | 国产另类在线 | 中文字幕免费在线 | 正在播放木下凛凛xv99 | 熟妇人妻久久中文字幕 | 久久国产人妻一区二区免色戒电影 | 好了av在线 | 国产一线二线三线在线观看 | 涩视频在线观看 | 国产91精品一区二区绿帽 | 久久精品无码一区 | 麻豆精品一区 | 91av视频 | 青娱乐在线视频免费观看 | 精品国产91| 丝袜调教91porn | 日韩电影福利 | 亚洲欧洲日本在线 | 成人精品一区二区三区视频 | 亚洲在线影院 | 尤物视频在线观看免费 | 国产亚洲AV无码成人网站在线 | 大胸美女啪啪 | www国产视频 | 瑟瑟视频网站 | ⅹxxxxhd亚洲日本hd老师 | 宅男午夜在线 | 久久久久女 | 国产精品一级黄色片 | 欧洲午夜视频 | 国产成人啪免费观看软件 | 夜夜春夜夜爽 | 欧美日韩中文在线 | 不卡国产在线 | 啪啪官网| 在线观看不卡av | 污污网站在线观看视频 | 中文字幕色片 | 99re久久精品国产 | 亚洲欧美在线视频观看 | 成人国产精品一区二区 | 亚洲色图导航 | 国产在线播放网站 | h无码动漫在线观看 | 女人高潮潮呻吟喷水 | 欧美操大逼 | 亚洲精品久久久中文字幕痴女 | 在线免费a视频 | 久久伊人成人网 |