zoukankan      html  css  js  c++  java
  • P3951 小凯的疑惑

    P3951 小凯的疑惑

    题解

    题意也就是求解不能用 ax+by 表示的最大数 ans(a,b,x,y,都是正整数)

    给定 a ( =7 ) ,  b ( =3 ) 

    我们可以把数轴非负半轴上的数按照a的剩余类分成a列,如上图

    所以 a 的倍数一定可以取到,此时 y=0,那么我们把 a 的倍数这一列划掉

    然后我们再考虑 y!=0的情况:

    (1)b的倍数一定可以取到,此时 x=0 

    (2)和b  %a  同余的数字一定可以取到,其实就是确定了 y,then确定了by,加上 a 的倍数

    所以我们就可以把 b 的倍数以及和它%a同余的数字划掉,表现在图中,也就是:

    把b的倍数那一列划掉

    最后总会出现 a 和 b 把数轴上的点(除了仅有的几个点)全部覆盖

    问题也就是求这仅有的几个点中最大的那一个

    当我们把数轴上的数字分成 a 列时,自然会有一列被 a 划掉

    还剩下a-1列要被 b 及其倍数划掉

    b每扩大一倍,就会覆盖掉一列  ( 因为大前提保证 gcd(a,b)=1 )

    那么当 b 扩大到第a-1倍时,就把剩下的所有数字覆盖了

    但是 b*(a-1) 这一列中,b*(a-1)上面的那个数字是一定不会被覆盖的,与它同一行的所有数字都会被覆盖掉,所以这个数字就是要求的最大值

    ans = b * ( a-1 ) - a

           = a * b - a - b 


    代码

    #include<bits/stdc++.h>
    
    using namespace std;
    
    long long a,b;
    
    int main()
    {
        scanf("%d%d",&a,&b);
        printf("%ld
    ",a*b-a-b);
        return 0;
    }
  • 相关阅读:
    【水】希望之花
    如何不用狄利克雷卷积证明莫比乌斯函数性质二
    【数学】gcd
    挂分宝典
    [luogu P6042]「ACOI2020」学园祭 题解
    [luogu P6041]「ACOI2020」布丁暗杀计划 题解
    11.19模拟
    「CSP-S2020」题解
    11.11模拟
    「洛谷P1445」樱花
  • 原文地址:https://www.cnblogs.com/xiaoyezi-wink/p/11002716.html
Copyright © 2011-2022 走看看