如果正整数可以被 A 或 B 整除,那么它是神奇的。
返回第 N 个神奇数字。由于答案可能非常大,返回它模 10^9 + 7 的结果。
示例 1:
输入:N = 1, A = 2, B = 3
输出:2
示例 2:
输入:N = 4, A = 2, B = 3
输出:6
示例 3:
输入:N = 5, A = 2, B = 4
输出:10
示例 4:
输入:N = 3, A = 6, B = 4
输出:8
提示:
1 <= N <= 10^9
2 <= A <= 40000
2 <= B <= 40000
class Solution:
def nthMagicalNumber(self, N, A, B):
def lcm(x, y):
if x % y == 0 or y % x == 0:
return max(x, y)
M = 0
greater = min(x, y)
for i in range(1, greater):
if A % i == 0 and B % i == 0:
M = i
return (A*B)//M
xmax = (N * max(A,B)+1)
xmin = 0
x=(xmax+xmin)//2
m=lcm(A,B)
while xmin<xmax:
x = (xmax+xmin)//2
print(xmax, xmin, x)
if (x//A+x//B-x//m)>N:
xmax=x
elif (x//A+x//B-x//m)<N:
xmin=x
elif (x//A+x//B-x//m)==N:
return int(max([(x//A)*A,(x//B)*B])%1000000007)