Combinations 乘法逆元
来源:互联网 发布:linux解包boot.img 编辑:程序博客网 时间:2024/06/08 09:57
G - Combinations
Given n different objects, you want to take k of them. How many ways to can do it?
For example, say there are 4 items; you want to take 2 of them. So, you can do it 6 ways.
Take 1, 2
Take 1, 3
Take 1, 4
Take 2, 3
Take 2, 4
Take 3, 4
Input starts with an integer T (≤ 2000), denoting the number of test cases.
Each test case contains two integers n (1 ≤ n ≤ 106), k (0 ≤ k ≤ n).
For each case, output the case number and the desired value. Since the result can be very large, you have to print the result modulo 1000003.
3
4 2
5 0
6 4
Case 1: 6
Case 2: 1
Case 3: 15
这题 给出a,b求 a,b的组合数mod1000003 我是先用fac打表fac[i]表示i的阶乘%1000003的结果,用inv【i】表示i的阶乘%1000003的乘法逆元;最后用组合公式即可。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
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=1;
int n,a,b;
fac[0]=inv[0]=1;
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);
LL ans=fac[a]*inv[b]%mod*inv[a-b]%mod;
printf("Case %d: %lld\n",cas++,ans);
}
return 0;
}
人一我百!人十我万!永不放弃~~~怀着自信的心,去追逐梦想。
- Combinations 乘法逆元
- lightoj 1067 - Combinations (组合数、乘法逆元)
- Light OJ 1067 Combinations (乘法逆元)
- 乘法逆元
- 乘法逆元
- 关于乘法逆元
- 乘法逆元
- 乘法逆元
- 乘法逆元
- 求乘法逆元
- 求乘法逆元
- 乘法逆元
- 乘法逆元
- 乘法逆元
- 乘法逆元
- 乘法逆元
- 乘法逆元基础知识
- 乘法逆元
- sublime3 汉化
- leetcode-Add Tow Numbers
- 09:整型与布尔型的转换
- Hololens的世界坐标理解
- iOS10 权限以及相关设置
- Combinations 乘法逆元
- 欢迎使用CSDN-markdown编辑器
- Git常用命令
- Laravel5 内置登录注册使用教程
- 51nod 1050 循环数组的最大子段和
- springboot入门(一)
- OpenGL ES 三种类型修饰 uniform attribute varying
- 基于NotePad应用的功能扩展
- servlet3.0 文件上传