求解形如ax+by == n (a,b已知)的方程的非负整数解个数时,需要用到扩展欧几里得定理,先求出最小的x的值,然后通过处理剩下的区间长度即可得到答案。

放出模板:

  1. ll gcd(ll a, ll b) {
  2. return b ? gcd(b, a%b) : a;
  3. }
  4.  
  5. ll lcm(ll a, ll b) {
  6. return a / gcd(a,b) * b;
  7. }
  8.  
  9. ll extend_gcd(ll a,ll b,ll&x,ll&y) {
  10. if(!b) {
  11. x = ;
  12. y = ;
  13. return a;
  14. }
  15. ll xt = , yt = ;
  16. ll d = extend_gcd(b, a % b, xt, yt);
  17. x = yt;
  18. y = xt - yt * (a/b);
  19. return d;
  20. }
  21.  
  22. ll cal(ll a,ll b,ll n) { //计算ax+by == n的非负整数解组数
  23. ll x = ,y = ,d;
  24. d = extend_gcd(a,b,x,y);
  25. if(n % d != ) {
  26. return ;
  27. }
  28. x *= n / d, y *= n / d;
  29. ll LCM = lcm(a,b);
  30. ll t1 = LCM / a, t2 = LCM / b;
  31. if(x<) {
  32. ll num = (-x) / t1;
  33. x += num * t1;
  34. y -= num * t2;
  35. if(x<) {
  36. y -= t2;
  37. x += t1;
  38. }
  39. }
  40. if(y<) {
  41. ll num = (-y) / t2;
  42. y += num * t2;
  43. x -= num * t1;
  44. if(y<) {
  45. y += t2;
  46. x -= t1;
  47. }
  48. }
  49. ll ans = x > && y > ;
  50. if(ans) {
  51. ans += min((x-) / t1, ((n-) / b - y) / t2);
  52. ans += min((y-) / t2, ((n-) / a - x) / t1);
  53. }
  54. return ans;
  55. }

扩展欧几里得 求ax+by == n的非负整数解个数的更多相关文章

  1. POJ - 1061 青蛙的约会 (扩展欧几里得求同余式)

    题意:两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清楚对 ...

  2. UVa 11768 格点判定(扩展欧几里得求线段整点)

    https://vjudge.net/problem/UVA-11768 题意: 给定两个点A(x1,y1)和B(x2,y2),均为0.1的整数倍.统计选段AB穿过多少个整点. 思路: 做了这道题之后 ...

  3. hdu_1576A/B(扩展欧几里得求逆元)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1576 A/B Time Limit: 1000/1000 MS (Java/Others)    Me ...

  4. 拓展欧几里得求 ax + by = c的通解(a >=0, b >= 0)

    #include <iostream> #include <cstdio> #include <algorithm> #include <vector> ...

  5. C Looooops(扩展欧几里得求模线性方程)

    http://poj.org/problem?id=2115 题意:对于C的循环(for i = A; i != B; i+=C)问在k位存储系统内循环多少次结束: 若循环有限次能结束输出次数,否则输 ...

  6. 青蛙的约会 扩展欧几里得 方程ax+by=c的整数解 一个跑道长为周长为L米,两只青蛙初始位置为x,y;(x!=y,同时逆时针运动,每一次运动分别为m,n米;问第几次运动后相遇,即在同一位置。

    /** 题目:青蛙的约会 链接:https://vjudge.net/contest/154246#problem/R 题意:一个跑道长为周长为L米,两只青蛙初始位置为x,y:(x!=y,同时逆时针运 ...

  7. 51Nod 1256 扩展欧几里得求乘法逆元

    给出2个数M和N(M < N),且M与N互质,找出一个数K满足0 < K < N且K * M % N = 1,如果有多个满足条件的,输出最小的. Input 输入2个数M, N中间用 ...

  8. [codeforces 200 E Tractor College]枚举,扩展欧几里得,三分

    题目出自 Codeforces Round #126 (Div. 2) 的E. 题意大致如下:给定a,b,c,s,求三个非负整数x,y,z,满足0<=x<=y<=z,ax+by+cz ...

  9. poj 2142 扩展欧几里得解ax+by=c

    原题实际上就是求方程a*x+b*y=d的一个特解,要求这个特解满足|x|+|y|最小 套模式+一点YY就行了 总结一下这类问题的解法: 对于方程ax+by=c 设tm=gcd(a,b) 先用扩展欧几里 ...

随机推荐

  1. 【OJ-UVa227】

    耗时一周.哭. 本题重在输入输出.所以对英文题目的理解非常重要.看清楚题目,省时省力. 题目要点: 1.开始有5×5的数据,每行仅有5个字符.注意:样例输入中的尾部空格是无法复制的(UVa官网上),其 ...

  2. iOS开发中用到的第三方库概览

    前言:记录一下使用过和接触过的第三方库,重要程度与顺序无关 网络请求: AFNetworking:AFNetworking is a delightful networking library for ...

  3. Java分享笔记:RandomAccessFile流 & 在文件指定位置插入内容

    RandomAccessFile流:随机存取文件流,该类定义了一个记录指针,通过移动指针可以访问文件的任意位置,且对文件既可以读也可以写.使用该类的write方法对文件写入时,实际上是一种覆盖效果,即 ...

  4. chromium之ThreadLocalStorage

    看看头文件怎么用 // Wrapper for thread local storage. This class doesn't do much except provide // an API fo ...

  5. CVE-2017-11882复现-office命令执行

    0x01 前言 11月14日,微软按照惯例发布了11月的安全更新,随后不久,安全公司EMBEDI在官方博客上公开了其向微软提交的编号为CVE-2017-11882的Office远程代码执行漏洞: ht ...

  6. Linux 必会

    一.一般命令:1.cd 进入磁盘文件夹2.ls- 查看当前文件夹包含哪些文件,注意-后面的3.pwd 立刻知道目前所在哪个文件及4.mkdir 创建文件夹5.touch touch命令用于修改文件或者 ...

  7. Asp.Net Core 使用Docker进行容器化部署(二)使用Nginx进行反向代理

    上一篇介绍了Asp.Net 程序在Docker中的部署,这篇介绍使用Nginx对Docker的实例进行反向代理 一.修改Nginx配置文件 使用winscp链接Liunx服务器,在/ect/nginx ...

  8. 吐血分享:QQ群霸屏技术(初级篇)

    QQ群,仿似一个冷宫;But,你真摒弃不起. 某人,坐拥2000多个2000人群,月收入10w+,此类人数少,皆因多年的沉淀,以形成完全的壁垒,难以企及的层次. 流量的分散,QQ群相对比较优质的地带, ...

  9. Hadoop(14)-MapReduce框架原理-切片机制

    1.FileInputFormat切片机制 切片机制 比如一个文件夹下有5个小文件,切片时会切5个片,而不是一个片 案例分析 2.FileInputFormat切片大小的参数配置 源码中计算切片大小的 ...

  10. 网站如何防止sql注入攻击的解决办法

    首先我们来了解下什么是SQL注入,SQL注入简单来讲就是将一些非法参数插入到网站数据库中去,执行一些sql命令,比如查询数据库的账号密码,数据库的版本,数据库服务器的IP等等的一些操作,sql注入是目 ...