【比赛】NOIP2017 小凯的疑惑

找规律:ans=a*b-a-b

证明:(可见 体系知识

gcd(A, B) = 1 → lcm(A, B) = AB

剩余类,把所有整数划分成m个等价类,每个等价类由相互同余的整数组成

任何数分成m个剩余类,分别为 mk,mk+1,mk+2,……,mk+(m-1)

分别记为{0(mod m)},{1(mod m)}……

而n的倍数肯定分布在这m个剩余类中

因为gcd(m,n)=1,所以每个剩余类中都有一些数是$n$的倍数,并且是平均分配

设 kmin = min { k | nk ∈ {i (mod m) } }, i ∈ [0, m)

则 nkmin 是{i (mod m)}中n的最小倍数。特别的,nm ∈ {0 (mod m)}

nkmin 是个标志,它表明{i (mod m)}中nkmin 后面所有数,即nkmin + jm必定都能被组合出来

那也说明最大不能组合数必定小于nkmin

我们开始寻找max{ nkmin }

lcm(m, n) = mn,所以很明显(m-1)n是最大的

因为(m-1)n是nkmin 中的最大值,所以在剩下的m-1个剩余类中,必定有比它小并且能被m和n组合,这些数就是(m-1)n -1,(m-1)n -2,……,(m-1)n -(m-1)

所以最大不能被组合数就是(m-1)n -m=m*n-m-n

 

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define ll long long
 4 ll a,b;
 5 int main()
 6 {
 7     freopen("math.in","r",stdin);
 8     freopen("math.out","w",stdout);
 9     scanf("%lld%lld",&a,&b);
10     printf("%lld\n",a*b-a-b);
11     return 0;
12 }
NOIP2017 小凯的疑惑

 

posted @ 2017-12-02 15:52  HYJ_cnyali  阅读(259)  评论(0编辑  收藏  举报