#include // #include // using namespace atcoder; #define _overload3(_1,_2,_3,name,...) name #define _rep(i,n) repi(i,0,n) #define repi(i,a,b) for(int i=int(a);i=int(0);--i) #define fore(i,a) for(auto &i:a) #define all(x) x.begin(),x.end() #define sz(x) ((int)(x).size()) #define bp(x) (__builtin_popcount((long long)(x))) #define pb push_back #define eb emplace_back #define mp make_pair #define V vector #define P pair #define TP tuple #define F first #define S second templatebool chmax(T &a, const T &b) { if (abool chmin(T &a, const T &b) { if (b bool overflow_if_add(T a, T b) { return (std::numeric_limits::max() - a) < b; } // a * b がオーバーフローするならtrueを返す template bool overflow_if_mul(T a, T b) { return (std::numeric_limits::max() / a) < b; } //最大公約数 long long gcd(long long a, long long b){ if (a%b == 0){return(b);} else{return(gcd(b, a%b));} } //最小公倍数 long long lcm(long long a, long long b){ ll g=gcd(a,b); a/=g; if(overflow_if_mul(a,b))return LONG_LONG_MAX; return a * b; } //約数列挙 vector enum_divisors(long long N) { vector res; for (long long i = 1; i * i <= N; ++i) { if (N % i == 0) { res.push_back(i); // 重複しないならば i の相方である N/i も push if (N/i != i) res.push_back(N/i); } } // 小さい順に並び替える sort(res.begin(), res.end()); return res; } int main() { ll t,a,b;cin>>t>>a>>b; ll l=lcm(a,b); t--; a=t/a+1; b=t/b+1; l=t/l+1; cout<