#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
template < class T> inline T GCD_L( T a,T b) {
T r;
while ( a) {
r= b;
b= a;
a= r% a;
}
return b;
}
template < class T> inline T LCM_L( T a,T b) {
return a/ GCD_L( a,b) * b;
}
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
class Solution{
public :
int nthUglyNumber( long long n, long long a, long long b, long long c) {
long long ab = LCM_L( a, b) ;
long long bc = LCM_L( b, c) ;
long long ca = LCM_L( c, a) ;
long long abc = LCM_L( LCM_L( a, b) , c) ;
long long WYIGIcGE;
long long t_ynMSdg;
long long KrdatlYV;
WYIGIcGE = 1 ;
t_ynMSdg = 2000000000 ;
while ( WYIGIcGE < t_ynMSdg) {
if ( ( WYIGIcGE + t_ynMSdg) % 2 == 0 ) {
KrdatlYV = ( WYIGIcGE + t_ynMSdg) / 2 ;
}
else {
KrdatlYV = ( WYIGIcGE + t_ynMSdg - 1 ) / 2 ;
}
if ( KrdatlYV/ a+ KrdatlYV/ b+ KrdatlYV/ c- KrdatlYV/ ab- KrdatlYV/ bc- KrdatlYV/ ca+ KrdatlYV/ abc >= n ) {
t_ynMSdg = KrdatlYV;
}
else {
WYIGIcGE = KrdatlYV + 1 ;
}
}
return t_ynMSdg;
}
}
;
// cLay varsion 20190921-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// class Solution {
// public:
// int nthUglyNumber(ll n, ll a, ll b, ll c) {
// ll ab = lcm(a,b);
// ll bc = lcm(b,c);
// ll ca = lcm(c,a);
// ll abc = lcm(a,b,c);
// return bsearch_min[ll,x,1,2d9]( x/a+x/b+x/c-x/ab-x/bc-x/ca+x/abc >= n );
// }
// };
//
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnRlbXBsYXRlPGNsYXNzIFQ+IGlubGluZSBUIEdDRF9MKFQgYSxUIGIpewogIFQgcjsKICB3aGlsZShhKXsKICAgIHI9YjsKICAgIGI9YTsKICAgIGE9ciVhOwogIH0KICByZXR1cm4gYjsKfQp0ZW1wbGF0ZTxjbGFzcyBUPiBpbmxpbmUgVCBMQ01fTChUIGEsVCBiKXsKICByZXR1cm4gYS9HQ0RfTChhLGIpKmI7Cn0KI2RlZmluZSBtYWluIGR1bW15X21haW4KaW50IG1haW4oKXsKICByZXR1cm4gMDsKfQojdW5kZWYgbWFpbgpjbGFzcyBTb2x1dGlvbnsKICBwdWJsaWM6CiAgaW50IG50aFVnbHlOdW1iZXIobG9uZyBsb25nIG4sIGxvbmcgbG9uZyBhLCBsb25nIGxvbmcgYiwgbG9uZyBsb25nIGMpewogICAgbG9uZyBsb25nIGFiID1MQ01fTChhLCBiKTsKICAgIGxvbmcgbG9uZyBiYyA9TENNX0woYiwgYyk7CiAgICBsb25nIGxvbmcgY2EgPUxDTV9MKGMsIGEpOwogICAgbG9uZyBsb25nIGFiYyA9TENNX0woTENNX0woYSwgYiksIGMpOwogICAgbG9uZyBsb25nIFdZSUdJY0dFOwogICAgbG9uZyBsb25nIHRfeW5NU2RnOwogICAgbG9uZyBsb25nIEtyZGF0bFlWOwogICAgV1lJR0ljR0UgPSAxOwogICAgdF95bk1TZGcgPSAyMDAwMDAwMDAwOwogICAgd2hpbGUoV1lJR0ljR0UgPCB0X3luTVNkZyl7CiAgICAgIGlmKChXWUlHSWNHRSArIHRfeW5NU2RnKSUyPT0wKXsKICAgICAgICBLcmRhdGxZViA9IChXWUlHSWNHRSArIHRfeW5NU2RnKSAvIDI7CiAgICAgIH0KICAgICAgZWxzZXsKICAgICAgICBLcmRhdGxZViA9IChXWUlHSWNHRSArIHRfeW5NU2RnIC0gMSkgLyAyOwogICAgICB9CiAgICAgIGlmKCBLcmRhdGxZVi9hK0tyZGF0bFlWL2IrS3JkYXRsWVYvYy1LcmRhdGxZVi9hYi1LcmRhdGxZVi9iYy1LcmRhdGxZVi9jYStLcmRhdGxZVi9hYmMgPj0gbiApewogICAgICAgIHRfeW5NU2RnID0gS3JkYXRsWVY7CiAgICAgIH0KICAgICAgZWxzZXsKICAgICAgICBXWUlHSWNHRSA9IEtyZGF0bFlWICsgMTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRfeW5NU2RnOwogIH0KfQo7Ci8vIGNMYXkgdmFyc2lvbiAyMDE5MDkyMS0xCgovLyAtLS0gb3JpZ2luYWwgY29kZSAtLS0KLy8gI2RlZmluZSBtYWluIGR1bW15X21haW4KLy8ge30KLy8gI3VuZGVmIG1haW4KLy8gCi8vIGNsYXNzIFNvbHV0aW9uIHsKLy8gcHVibGljOgovLyAgIGludCBudGhVZ2x5TnVtYmVyKGxsIG4sIGxsIGEsIGxsIGIsIGxsIGMpIHsKLy8gICAgIGxsIGFiID0gbGNtKGEsYik7Ci8vICAgICBsbCBiYyA9IGxjbShiLGMpOwovLyAgICAgbGwgY2EgPSBsY20oYyxhKTsKLy8gICAgIGxsIGFiYyA9IGxjbShhLGIsYyk7Ci8vICAgICByZXR1cm4gYnNlYXJjaF9taW5bbGwseCwxLDJkOV0oIHgvYSt4L2IreC9jLXgvYWIteC9iYy14L2NhK3gvYWJjID49IG4gKTsKLy8gICB9Ci8vIH07Ci8vIAo=