zoukankan      html  css  js  c++  java
  • hdoj5698

    果然以前不想搞的东西,今天他妈全来了,我要爆炸,除了说操。。。。真是欲哭无泪啊。。。。。

    //这道题目卡在逆元了。。。。

    //利用逆元计算1/(n!(m-n)!)
    //对于正整数a,m如果有ax≡1(modm),那么把这个同余方程中x的最小正整数解叫做a模m的逆元。

    problem1:
    //这道题为什么要有乘法逆元呢?

    模运算与基本四则运算有些相似,但是除法例外。其规则如下:
    若a≡b (% p),则对于任意的c,都有(a + c) ≡ (b + c) (%p);

    若a≡b (% p),则对于任意的c,都有(a * c) ≡ (b * c) (%p);

    若a≡b (% p),c≡d (% p),则 (a + c) ≡ (b + d) (%p),(a - c) ≡ (b - d) (%p),

    (a * c) ≡ (b * d) (%p),(a / c) ≡ (b / d) (%p);

    problem2:
    怎么求逆元:
    //逆元一般用【扩展欧几里得】算法来求得,但是这里的m是素数,那么还可以根据【费马小定理】得到逆元为 a^m-2 mod m。

    #include<cstdio>
    #include<algorithm>
    typedef long long LL;
    using namespace std;
    const int maxn = 1e6+7;
    const int mod = 1e9+7;
    long long fac[maxn];
    
    
    long long qpow(long long a,long long b)
    {
        long long ans=1;
        a%=mod;
        while(b)
        {
            if(b%2)
                ans=ans*a%mod;
            a=a*a%mod;
            b/=2;
        }
        return ans;
    }
    
    long long C(long long n,long long m)
    {
        if(m>n||m<0)return 0;
        long long s1=fac[n];
        long long s2=fac[n-m]*fac[m]%mod;
      //  printf("%lld %lld
    ",s1,s2);
        return s1*qpow(s2,mod-2)%mod;
    }
    
    int n,m;
    int main()
    {
        fac[0]=1;
        for(int i=1;i<maxn;i++)
            fac[i]=fac[i-1]*i%mod;
        LL a,b;
        while(scanf("%d%d",&n,&m)!=EOF)
            printf("%lld
    ",C(n+m-4,n-2));
    }
  • 相关阅读:
    LAMP的搭建
    linux利用命令重置大量密码
    CSS的应用下
    Day13 CSS的与应用
    Day12 CSS简单用法
    Day12 前端html
    Day11 数据库的基本语法(偏重于查询)
    Java-->把txt中的所有字符按照码表值排序
    Java-->将txt文件的所有行反转
    Java-->在txt文件每一行前加行数和冒号
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/5934524.html
Copyright © 2011-2022 走看看