洛谷P1313 计算系数 数学 数论

洛谷P1313 计算系数
数学 数论
1、首先我们不管这个系数 a b 那么他的系数就是杨辉三角 他那项就是 c(k,n)x^n*y^m
2、然后现在加了系数 a 和 b ,那么就只要把 a 看做 x中的,然后a与x一样,相当a^n
3、可以发现,x^n*y^m项的系数一定有一个因数a^n*b^m,所以可以提取出来。
4、然后关于求C的话由两种方法,一种方法是杨辉三角 这样要 n^2 求 但数据再大点就挂了
5、然后还可以质因数分解求
6、我是用费马小定理求逆元做的,因为 mod 别的还行,除法不能直接模,得求逆元
根据欧拉定理 a^phi(mod) == 1 ( % mod ) ( gcd( a,mod ) == 1
然后推得费马小定理 a^(mod-1) == 1 ( % mod ) ( gcd( a,mod ) ==1 && mod is prime )
因为质数的phi 是 n-1 所以 a 的逆元为 a^( mod-2) a*a^(mod-1) ==1 (% mod )
7、这样逆元求出来就可以求答案了

PS a 与 b 可能一开始就已经超过 mod了,然后乘一下就爆 int 了,所以需要一开始就要 % mod
否则会炸

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <cmath>
 4 #include <cstdlib>
 5 #include <string>
 6 #include <algorithm>
 7 #include <iomanip>
 8 #include <iostream>
 9 using namespace std ;
10
11 const int mod = 10007,mod2 = 10006 ;
12 int a,b,k,n,m,ans ;
13
14 inline int ksm(int base,int ind)
15 {
16     int a[32],num = 0,sum = 1  ;
17     while(ind)
18     {
19         a[++num] = ind&1 ;
20         ind/=2 ;
21     }
22     for(int i=num;i;i--)
23     {
24         sum = sum*sum % mod ;
25         if( a[ i ] ) sum = sum*base % mod ;
26     }
27     return sum ;
28
29 }
30
31 int main()
32 {
33     scanf("%d%d%d%d%d",&a,&b,&k,&n,&m ) ;
34     a%=mod;  b%=mod ;
35     ans = 1 ;
36     for(int i=2;i<=k;i++) ans = ans*i % mod ;
37     for(int i=2;i<=n;i++) ans = ( ans*ksm(i,mod-2) ) % mod ;
38     for(int i=2;i<=m;i++) ans = ( ans*ksm(i,mod-2) ) % mod ;
39     ans = ( ans*ksm( a,n ) % mod ) *ksm( b,m ) % mod ;
40     printf("%d\n",ans) ;
41
42     return 0 ;
43 } 
时间: 2024-11-08 17:22:21

洛谷P1313 计算系数 数学 数论的相关文章

洛谷P1313 计算系数

P1313 计算系数 题目描述 给定一个多项式(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 ≤1

洛谷P1313 计算系数【快速幂+dp】

P1313 计算系数 题目描述 给定一个多项式(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

【数论】洛谷P1313计算系数

题目描述 给定一个多项式(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% 的

[NOIP2011] 洛谷P1313 计算系数

题目描述 给定一个多项式(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% 的

洛谷 P1313 计算系数 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:https://www.luogu.org/problem/show?pid=1313 题目描述 给定一个多项式(by+ax)^k,请求出多项式展开后x^n*y^m 项的系数. 输入输出格式 输入格式: 输入文件名为factor.in. 共一行,包含5 个整数,分别为 a ,b ,k ,n ,m,每两个整数之间用一个空格隔开. 输出格式: 输出共1 行,包含一个整数,表示所求的系数,这个系数可能很大,输出对10007

洛谷 P1313 计算系数

题目描述 给定一个多项式(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% 的

洛谷P1969 积木大赛 数学

洛谷P1969 积木大赛 题意: 对于n个积木 排成了一排 高度不同 每次可以使 L--R的区间积木减一,但不能使积木高度减至 0 以下 , 求几次能够使得所有积木高度降为 0 数学 1.对于一段 上升.不下降序列,其较低的一定会在解决最高时候就解决掉 2.而这段区间还同时会解决掉下一段区间最小值 以下的那些积木 3.所以这段区间消耗值就是这段上升(不下降)序列的最大值减最小值 先写思路:对于一段上升(不下降)区间,我们在搭最高层时可以把下面一起搭了而如果这个区间开始下降,那么我们进入另一个区间

P1313 计算系数

题目描述 给定一个多项式(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% 的

洛谷 P1727 计算π

P1727 计算π 题目背景 <爱与愁的故事第二弹·compute>第一章. 题目描述 中秋至,博饼声铿锵不断.爱与愁大神兴致勃勃地到学校博饼,结果抱回家的只有一秀二举.爱与愁大神十分生气,打电话给月落乌啼:“喂,帮我算出圆周率小数点后n(n<=10000)位,速度……”然后就挂了电话,也不知道月落乌啼正准备去上课.月落乌啼只好请到了你,让你编一个程序求出圆周率小数点后n位. 输入输出格式 输入格式: 只有一行:n 输出格式: 若干行. 第一行:3. 第二行开始:圆周率的小数部分.10个