参考链接买不到的题目题解
解题思路:
①首先我们要解决边界的问题,从哪一个数开始往下进行判断。这里我想到的是a和b的最小公倍数。从最小公倍数开始,依次递减1往下判断其是否能被a,b组合。
②如何判断一个数是否能被a,b组合
若x能被a,b组合,则一定存在m和n使得ma+nb == x
我们可以先用x除以a取整,结果记为k。再用x除以a取余,结果记为mod。
如果mod = 0,则n可以由a,b进行组合。
如果mod != 0 则判断 (ia+mod) 是否能整除b(0<=i<=k),如过存在i使得(ia+mod) 能整除b,则n能被a,b组合。如果不存在i,则n不能被a和b组合。
解决这两个问题就能计算出答案了。
# 这俩数最快在啥时候能通过确定的组合,得到1的增量就行
a, b = [int(x) for x in input().split()]
Max = a*b
while Max>0:
flag = False
if Max%a == 0 or Max %b ==0:
Max -= 1
continue
k = Max//a
m = Max%a
for i in range(k+1):
if (m+i*a)%b == 0:
Max -= 1
flag = True
break
if not flag:
break
print(Max)
总结:可以看成是一道模拟题,如果找不到规律,就想办法模拟。