zoukankan      html  css  js  c++  java
  • Lucas小记

    组合数学全忘了

    记笔记记笔记

    做个简单题

    代码 from bzoj4403

     1 #include <stdio.h>
     2 
     3 #define p 1000003
     4 
     5 typedef long long ll;
     6 
     7 ll fac[p], inv[p]; 
     8 
     9 ll C(ll x, ll y) {
    10     if(x < y) return 0;
    11     return fac[x] * inv[y] % p * inv[x - y] % p;
    12 }
    13 
    14 ll lucas(ll x, ll y) {
    15     ll ret = 1;
    16     while(x && y) {
    17         ret = (ret * C(x % p, y % p)) % p; 
    18         x /= p, y /= p;
    19     }
    20     return ret;
    21 }
    22 
    23 int main() {
    24     int t, n, l, r, i;
    25     fac[0] = 1, inv[1] = inv[0] = 1;
    26     for(i = 2;i < p;i ++) inv[i] = inv[p % i] * (p - p / i) % p;
    27     for(i = 2;i < p;i ++) inv[i] = inv[i - 1] * inv[i] % p; 
    28     for(i = 1;i < p;i ++) fac[i] = fac[i - 1] * i % p;
    29     for(scanf("%d", &t);t --;) {
    30         scanf("%d %d %d", &n, &l, &r), r -= l - 1;
    31         printf("%lld
    ", (lucas(n + r, r) + p - 1) % p);
    32     }
    33     return 0;
    34 }
    View Code

    1. nm大p小用lucas

    2.p固定,可以预处理

       可以选择只预处理fac前缀,O(logn)求组合数

     也可以同时预处理inv前缀,O(1)求组合数

    3.inv[0] = inv[1]  = 1

     inv[i] = inv[p % i] * (p - p / i) % p

  • 相关阅读:
    telnet
    lrzsz工具小问题处理
    1 Boost 安装简介
    klbostee/dumbo
    《笨办法学 C 语言》翻译项目
    关注生成器
    PHP学习之三:变量
    HTML5新书三章大纲分享
    C# 处理 google map 经纬度偏移量
    Jquery 的百度地图应用
  • 原文地址:https://www.cnblogs.com/ytytzzz/p/7812175.html
Copyright © 2011-2022 走看看