博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ2982: combination Lucas
阅读量:5083 次
发布时间:2019-06-13

本文共 1247 字,大约阅读时间需要 4 分钟。

Description

LMZ
n
个不同的基友,他每天晚上要选
m
个进行
[
河蟹
]
,而且要求每天晚上的选择都不一样。那么
LMZ
能够持续多少个这样的夜晚呢?当然,
LMZ
的一年有
10007
天,所以他想知道答案
mod 10007
的值。
(1<=m<=n<=200,000,000)

Input

  
第一行一个整数
t
,表示有
t
组数据。
(t<=200)
  
接下来
t
行每行两个整数
n, m
,如题意。

Output

T
行,每行一个数,为
C(n, m) mod 10007
的答案。

Sample Input

4
5 1
5 2
7 3
4 2

Sample Output

5
10
35
6

Solution

Lucas板子

#include 
using namespace std ;const int mod = 10007 ;int t , n , m ;int fac[ mod + 10 ] , ifac[ mod + 10 ] ; int power( int a , int b ) { int ans = 1 , base = a ; while( b ) { if( b & 1 ) ans = ans * base % mod ; base = base * base % mod ; b >>= 1 ; } return ans ;}int lucas( int a , int b ) { if( a > b ) return 0 ; if( b <= mod ) return fac[ b ] % mod * ifac[ a ] % mod * ifac[ b - a ] % mod ; return lucas( a % mod , b % mod ) % mod * lucas( a / mod , b / mod ) % mod ;}int main() { scanf( "%d" , &t ) ; fac[ 0 ] = 1 ; for( int i = 1 ; i <= mod ; i ++ ) fac[ i ] = fac[ i - 1 ] * i % mod ; for( int i = 0 ; i <= mod ; i ++ ) ifac[ i ] = power( fac[ i ] , mod - 2 ) % mod ; while( t -- ) { scanf( "%d%d" , &n , &m ) ; printf( "%d\n" , lucas( m , n ) ) ; } return 0 ;}

 

转载于:https://www.cnblogs.com/henry-1202/p/BZOJ2982.html

你可能感兴趣的文章
UVa540 Team Queue(队列queue)
查看>>
mysql数据增删改查
查看>>
shell中下载最新版本或指定版本的办法(Dockerfile 中通用)
查看>>
极客时间-左耳听风-程序员攻略-分布式架构工程设计
查看>>
akka之种子节点
查看>>
不知道做什么时
查看>>
matlab 给某一列乘上一个系数
查看>>
密码学笔记——培根密码
查看>>
Screening technology proved cost effective deal
查看>>
MAC 上升级python为最新版本
查看>>
创业老板不能犯的十种错误
查看>>
Animations介绍及实例
查看>>
判断请求是否为ajax请求
查看>>
【POJ2699】The Maximum Number of Strong Kings(网络流)
查看>>
spring boot配置跨域
查看>>
BZOJ 1996 合唱队(DP)
查看>>
进击吧!阶乘——大数乘法
查看>>
安卓学习资料推荐-25
查看>>
Mysql数据库备份和还原常用的命令
查看>>
关于退出当前页面在火狐的一些问题
查看>>