zoukankan      html  css  js  c++  java
  • 除法取模练习(51nod 1119 & 1013 )

    题目:1119 机器人走方格 V2

    思路:求C(m+n-2,n-1) % 10^9 +7       (2<=m,n<= 1000000)

       在求组合数时,一般都通过双重for循环c[i][j] = c[i-1][j] + c[i-1][j-1]直接得到。

       但是m,n都很大时,就会超时。

       

       利用公式:C(n,r) = n! / r! *(n-r)!  与  a/b = x(mod M)  ->  a * (b ^ (M-2)) =x (mod M)     进行求解

    费马小定理:对于素数 M 任意不是 M 的倍数的 b,都有:b ^ (M-1) = 1 (mod M)

    a/b = x(mod M)  ->  a * (b ^ (M-2)) =x (mod M)的推导:

      只要 M 是一个素数,而且 b 不是 M 的倍数,就可以用一个逆元整数 b’,通过 a / b = a * b' (mod M),来以乘换除。

      a/b = x(mod M)

      a / b = a / b * (b ^ (M-1)) = a * (b ^ (M-2)) = x(mod M)

      而b ^ (M-2) mod M 就是逆元整数 b`。

    所以最终要求的 x = n! *[r! *(n-r)!]^(M-2)  (mod M)  

    #include <cstdio>
    #include <string>
    
    const int mod = 1000000007;
    const int maxN = 1e6;
    long long c[maxN*2 +10];
    int m,n;
    
    void init(){
        c[0] = 0;
        c[1] = 1;
        for(int i =1; i <= maxN*2+5; i++)
            c[i+1] = (c[i] *(i+1) ) % mod;
    }
    
      
    int main(){
        init();
        while(~scanf("%d%d",&n,&m))
        {
            long long ans = c[n - 1 + m - 1];
            ans = (ans * pow(c[n-1],mod - 2)) % mod;
            ans = (ans * pow(c[m - 1] ,mod - 2)) % mod;
            printf("%lld
    ",ans);
        }
        return 0;
    }

     题目:1013 3的幂的和

    思路:用公式求 等比数列 % 10^9+7

       这仍旧是除法取模;

    sn=(a1(q^n-1))/(q-1) % M =  (a1(q^n-1))*(q-1)^ (M  -1) % M;
      
    #include <iostream>
    
    using namespace std;
    
    const int mod = 1e9+7;
    
    long long pow(long long n,long long m)
    {
        long long ans = 1;
        while(m > 0)
        {
            if(m & 1)ans = (ans * n) % mod;
            m = m >> 1;
            n = (n * n) % mod;
        }
        return ans;
    }
    
    int main()
    {
        int n;
        cin >>n;
        cout<< ((pow(3, n+1)-1)*pow(2, mod-2))%mod<<endl;
        return 0;
    }

      
  • 相关阅读:
    redis删除指定前缀的缓存
    php生成N个不重复的随机数实例
    Redis数据持久化,安全
    MySQL LOAD DATA
    utf 8无bom和utf 8什么区别
    MySQL直接导出CSV文件,并解决中文乱码的问题
    php 中将完整的年月日时分秒的时间转换成 年月日的形式
    PHP如何根据数组中的键值进行排序
    PHP array_multisort—对多个数组或多维数组进行排序
    sql case 函数与详细说明
  • 原文地址:https://www.cnblogs.com/yoyo-sincerely/p/5719883.html
Copyright © 2011-2022 走看看