NOIP2011多项式系数[快速幂|组合数|逆元]

题目描述

给定一个多项式(by+ax)^k,请求出多项式展开后x^n*y^m 项的系数。

输入输出格式

输入格式:

输入文件名为factor.in。

共一行,包含5 个整数,分别为 a ,b ,k ,n ,m,每两个整数之间用一个空格隔开。

输出格式:

输出共1 行,包含一个整数,表示所求的系数,这个系数可能很大,输出对10007 取模后的结果。

输入输出样例

输入样例#1:

1 1 3 1 2

输出样例#1:

3

说明

【数据范围】

对于30% 的数据,有 0 ≤k ≤10 ;

对于50% 的数据,有 a = 1,b = 1;

对于100%的数据,有 0 ≤k ≤1,000,0≤n, m ≤k ,且n + m = k ,0 ≤a ,b ≤1,000,000。

noip2011提高组day2第1题

------------------------------------------------------------------------------------------------------------

随便一推导,ans为C(m+n,n) * a^n * b^m

快速幂取模,组合数,逆元(模除法)

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
typedef long long ll;
const int MOD=10007;
ll a,b,k,n,m;
ll powMod(ll a,ll b){
    a%=MOD;b%=MOD;
    ll ans=1;
    for(;b;b>>=1,a=(a*a)%MOD)
        if(1&b) ans=(ans*a)%MOD;
    return ans;
}
ll C(ll n,ll k){
    ll s1=1,s2=1;
    if(k>n-k) k=n-k;
    for(int i=1;i<=k;i++){
        s1=s1*(n-i+1)%MOD;
        s2=s2*i%MOD;
    }
    return s1*powMod(s2,MOD-2)%MOD;        //in
}
int main(){
    scanf("%lld%lld%lld%lld%lld",&a,&b,&k,&n,&m);
    printf("%lld",C(m+n,m)*powMod(a,n)*powMod(b,m)%MOD);

}
时间: 2024-08-08 18:08:57

NOIP2011多项式系数[快速幂|组合数|逆元]的相关文章

数论——快速幂,模运算及快速幂求逆元

一.快速幂 原理: 快速幂的原理十分简单. ak=a2^0*a2^1*a2^2*…a2^x,其中k=20+21+22+…+2x. 这显然是正确的.因为任何一个数都可以表示成二进制. 接下去利用位运算实现即可. 代码实现 模板题链接:快速幂 代码模板如下:时间复杂度O(logk) int qmi(int a,int k,int p) { int res=1%p; while(k) { if(k&1)res=(long long)res*a%p; a=(long long)a*a%p; k>&g

hdu-4990 Reading comprehension(快速幂+乘法逆元)

题目链接: Reading comprehension Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 32768/32768 K (Java/Others) Problem Description Read the program below carefully then answer the question.#pragma comment(linker, "/STACK:1024000000,1024000000"

快速幂和逆元问题

当计算结果很大时对mod=1e9+7取余,用到同余定理.求2的幂直接暴力求(当然也可以快速幂) 求组合数的时候用到除法,又要取余,所以用到逆元.所以用到逆元公式. 1.什么是逆元 当求解公式:(a/b)%m 时,因b可能会过大,会出现爆精度的情况,所以需变除法为乘法: 设c是b的逆元,则有b*c≡1(mod m): 则(a/b)%m = (a/b)*1%m = (a/b)*b*c%m = a*c(mod m); 即a/b的模等于 a*b的逆元 的模: 2.费马小定理求逆元 x^(mod-2)为x

Happy 2004(快速幂+乘法逆元)

Happy 2004 问题描述 : Consider a positive integer X,and let S be the sum of all positive integer divisors of 2004^X. Your job is to determine S modulo 29 (the rest of the division of S by 29). Take X = 1 for an example. The positive integer divisors of 2

hdu-5690 All X(快速幂+乘法逆元)

题目链接: All X Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Others) Problem Description F(x,m) 代表一个全是由数字x组成的m位数字.请计算,以下式子是否成立: F(x,m) mod k ≡ c Input 第一行一个整数T,表示T组数据.每组测试数据占一行,包含四个数字x,m,k,c 1≤x≤9 1≤m≤10^10 0≤c<k≤10,000 Ou

[HDOJ1492]Happy 2004(数论,快速幂,逆元,积性函数)

题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1452 题意:求2004^n的所有因子和. 1 #include <algorithm> 2 #include <iostream> 3 #include <iomanip> 4 #include <cstring> 5 #include <climits> 6 #include <complex> 7 #include <

HDU 5793 A Boring Question (找规律 : 快速幂+乘法逆元)

A Boring Question Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 865    Accepted Submission(s): 534 Problem Description There are an equation.∑0≤k1,k2,?km≤n∏1?j<m(kj+1kj)%1000000007=?We define

UVALive 7040 Color (容斥原理+逆元+组合数+费马小定理+快速幂)

题目:传送门. 题意:t组数据,每组给定n,m,k.有n个格子,m种颜色,要求把每个格子涂上颜色且正好适用k种颜色且相邻的格子颜色不同,求一共有多少种方案,结果对1e9+7取余. 题解: 首先可以将m 与后面的讨论分离.从m 种颜色中取出k 种颜色涂色,取色部分有C(m, k) 种情况: 然后通过尝试可以发现,第一个有k种选择,第二个因不能与第一个相同,只有(k-1) 种选择,第三个也只需与第二个不同,也有(k-1) 种选择.总的情况数为k ×(k-1)^(n-1).但这仅保证了相邻颜色不同,总

组合数取模(逆元+快速幂(转)

组合数公式: 我们需要求阶乘和逆元阶乘 我们就用1e9+7来求余吧 费马小定理 a^(p-1) ≡1 (mod p) 两边同除以a a^(p-2) ≡1/a (mod p) 数论1/a 是inv(a) 应该写a^(p-2) ≡ inv(a) (mod p) 所以inv(a) = a^(p-2) (mod p) 这个用快速幂求一下,复杂度O(logn) 引用其他人写的一句话 除法求模不能类似乘法,对于(A/B)mod C,直接(A mod C)/ (B mod C)是错误的:找到B的逆元b(b=B