第N个神奇数字
https://leetcode.cn/problems/nth-magical-number/
class Solution {
public:
int mod=1e9+7;
int nthMagicalNumber(int n, int a, int b) {
long long lcm1=lcm(a,b);
if(a>b){
a=a^b;
b=a^b;
a=a^b;
}
long long l=a-1;
long long r=(long long)n*a;
long long mid;
if(a==b)return r%mod;
while(l+1<r){
mid=(l+r)>>1;
if(check(mid,n,a,b,lcm1))l=mid;
else r=mid;
}
return r%mod;
}
bool check(long long x,int n,int a,int b,int lcm1){
return (x/a+x/b-(x/lcm1)<=n-1) ? 1:0;
}
long long gcd(int a,int b){
return b==0 ? a : (gcd(b,a%b));
}
long long lcm(int a,int b){
return a/gcd(a,b)*b;
}
};
同余原理
(a+b)%mod=(a%mod+b%mod)%mod;//加法
(a*b*c)%mod=(((a%mod)*b)%mod*c)%mod;//乘法
(a-b)%mod=(a%mod-b%mod+mod)%mod;//减法