本文主要是介绍力扣878.第N个神奇数字,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
力扣878.第N个神奇数字
-
二分答案
- check():公共部分为最大公倍数的倍数
-
class Solution {const long MOD = 1e9 + 7;public:int nthMagicalNumber(int n, int a, int b) {//lcm函数 求最大公倍数long lcm = std::lcm(a,b);auto check = [&](long long mid) -> bool{long long res = mid / a + mid / b - mid / lcm;if(res >= n) return true;return false;};long long l = 0,r = (long long)min(a,b)*n;while(l<r){long long mid = l + r >> 1;if(check(mid)) r = mid;else l = mid + 1;}return l%MOD;}};
这篇关于力扣878.第N个神奇数字的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!