链接:

https://ac.nowcoder.com/acm/contest/553/D

Chino的数学很差,因此Cocoa非常担心。今天,Cocoa要教Chino解不定方程。
众所周知,不定方程的解有0个或者若干个。
给出方程:

Cocoa想知道这个不定方程的正整数解和非负整数解各有几个。
题目对Chino来说太难啦,你能帮一帮Chino吗?

输入描述:

两个正整数m, n

输出描述:

题目要求的答案,即正整数解的个数和非负整数解的个数 。由于答案可能会很大,你只需要输出答案 mod(109 + 7) 即可。

输入
4 7
输出
20 120
思路:

①正整数解:相当于 将n个球排成一排,球与球之间形成n-1个空隙,将两个隔板插入这些空隙中(每空至多插一块隔板),规定由隔板分成的m部分的球数分别为x1、x2、x3…xm之值。则隔法与解的个数之间建立了一一对立关系,故解的个数为C(n-1,m-1)=C(6,3)=20(个)。

②非负整数解: 刚才我们求的是正整数解,现在求非负整数的解(也就是可以为0),我们刚才隔板分成的这些部分都不能为0,现在我们可以转换一下

注意到x1、x2、x3…xm可以为零,故例1解法中的限定“每空至多插一块隔板”就不成立了,怎么办呢?只要添加m个球,给x1、x2、x3…xm各添加一个球,**这样原问题就转化为求 x1+x2+x3…+xm=n+m的正整数解的个数了,**则问题就等价于把n+m个相同小球放入m个不同箱子,每个箱子至少一个,有几种情况?易得解的个数为C(n+m-1,m-1)=C(10,3)=120(个)。

还有一个问题就是:取模。

因为涉及到除法取模需要用到费马小定理+逆元

①对于正整数,如果有,那么把这个同余方程中的最小正整数解叫做的逆元。

②这个为费马小定理,m为素数是费马小定理的前置条件。

求a/b=x(mod M)

只要M是一个素数,而且b不是M的倍数,就可以用一个逆元整数b1,通过 a/b=a*b1 (mod M),只能来以乘换除。
费马小定理:对于素数 M 任意不是 M 的倍数的 b,都有:b ^ (M-1) = 1 (mod M)于是可以拆成:b*b^(M-2)=1(mod M)于是:a/b=a/b*(b * b ^ (M-2))=a*(b ^ (M-2)) (mod M),这里不就是用b^(M-2)代替了1/b吗!

综上:(a/b)%m = a / b * (b*b^(m-2)) = (a * (b^(m-2)))%m;

代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll Mod = 1e9+7;
ll qc(ll a,ll b,ll c)
{ll ans=1;while(b){if(b&1)ans=(ans*a)%c;a=(a*a)%c;b>>=1;}return ans;
}
int main()
{ll n, m;cin >> m >> n;ll sum1 = 1;ll sum3 = 1;ll sum2 = 1;for(int i = 1; i <=m-1; i++) {sum1=(sum1 * (n+m-i))%Mod;sum3=(sum3 * (n-i))%Mod;sum2=(sum2*i)%Mod;}printf("%lld %lld\n",(sum3*qc(sum2,Mod-2,Mod))%Mod,sum1*qc(sum2,Mod-2,Mod)%Mod);return 0;
}

Chino with Equation (隔板法+除法取模)相关推荐

  1. java乘法逆元与除法取模,关于数论乘法逆元及相关知识点

    在求解a/b%m时,可以转化为(a%(b*m))/b,转化过程如下 令k = (a/b)/m(向下取整), x = (a/b)%m; a/b = k*m + x (x < m); a = k*b ...

  2. java乘法逆元与除法取模,逆元

    题目描述 题目描述 求关于x的同余方程ax≡1(mod b)的最小正整数解. 输入格式 每组输入数据只有一行,包含两个正整数a, b,用一个空格隔开. 数据规模: 对于40%的数据,2≤b≤1,000 ...

  3. Codeforces Round #104 (Div. 2) E DP(01背包模型) +组和+除法取模求逆元

    题意: 规定只包含4或7的数为幸运数字,给定n个数的序列,求他的子序列,使得该子序列的长度为k并且满足该子序列中不存在相同的两个幸运数字.问一共寻在多少种可能.(只要该数的下标不同则认为是不同的序列) ...

  4. 多项式的基础操作(逆元/除法/取模/对数ln/开根sqrt/指数exp/快速幂)带模板+luogu全套例题

    文章目录 多项式的逆元 理论推导 模板 例题:[luogu P4238][模板]多项式乘法逆 题目 code 多项式的除法/取模 理论推导 多项式牛顿迭代法 模板 例题:[luoguP4512][模板 ...

  5. 牛客 Celestial Resort 质因数分解求最小公倍数 除法取模

    题目描述 Madeline来到了Celeste山的天空度假山庄(Celestial Resort).工作人员Oshiro先生希望Madeline住在这里,而这里却因为早就没有客人来光顾而脏乱不堪. 虽 ...

  6. hdu1852 Beijing 2008(约数之和 : 无逆元除法取模 | 等比数列分治求和)

    题意: 给你n,k,M=2008n%k,求2008M%k给你n,k,M = 2008^{n}\%k,求2008^{M}\%k给你n,k,M=2008n%k,求2008M%k 思路: 唯一分解定理分解质 ...

  7. 多项式求逆与多项式除法/取模

    多项式求逆 Procedure 多项式求逆是多项式模块中的一个重要操作("操作"这个词看出如今多项式题是多么的工业化,犹如毒瘤8操作LCT),在做生成函数/多项式除法.多项式取模/ ...

  8. python 除法取模_Python的运算符和表达式(上)

    上一篇文章霖小白分享了Python中的字符串和数字类型,这一篇让我们回到小学时代的数学,因为霖小白这一篇分享的是关于Python程序中的运算符和表达式,这一次先分享算术运算符和算术表达式,比较运算符和 ...

  9. 大数运算(5)——大数除法(取模、取余)

    有关于大数除法的运算可以大致分为两种:一种是求商(取模),另一种是求余数(取余). 有两个大整数a和b,当a==b时,a/b==1,余数是0.(a!=0,b!=0) 当a>b时,a/b>= ...

最新文章

  1. poj 2262 Goldbach's Conjecture(筛素数)
  2. 转载:Prototype.js的中文使用手册
  3. 6.旋转数组的最小数字
  4. android studio | openGL es 3.0增强现实(AR)开发 (2) .so文件的应用和理解
  5. 485通讯测试软件,485串口测试 RS485口测试方法
  6. OpenGl运行窗口出现纯白色
  7. h5 js 打开微信客户端
  8. 一文读懂对抗学习!5千字精炼提干
  9. select函数作用
  10. 表空间的相关查询命令
  11. pytorch 中的torch.bmm
  12. C++之 fgets函数
  13. 粗读MD-UNET: Multi-input dilated U-shape neural network for segmentation of bladder cancer
  14. R语言 - 逻辑回归
  15. linux文件系统dentry_Linux 文件系统(一)---虚拟文件系统VFS----超级块、inode、dentry、file...
  16. 旧手机文件存储服务器,用旧手机做云存储服务器
  17. MatLab学习笔记(三)--控制语句与函数编程
  18. 看门狗ADM8323-8324使用心得
  19. 【Java】用sort实现对数组的升序和降序排序
  20. FancyCache Volume 0.8.0

热门文章

  1. 活体检测在移动端模型部署
  2. 如何在Mac上刻录DVD以获取可播放的视频?
  3. 程序运行程序是出现的this application has requested the runtime to terminate it in an unusual way. 异常分析
  4. win10设置开机启动项_华硕主板如何设置开机第一启动项方法大全
  5. Map.entry详解
  6. baidu卫兵世界杯智能提速 打破运营商OTT端阻力
  7. win10解除安全模式
  8. 三体究竟有多可怕?用Python建模来深度了解
  9. 红颜祸水?她很美,却不是“人”,还成为了威胁?
  10. 挑战5G测试 思博伦Vertex信道仿真器助力5G研发