package main import . "fmt" import . "math/big" import . "sort" func main() { var a,b,k int Scan(&a,&b,&k) gcd := int(new(Int).GCD(nil,nil,NewInt(int64(a)),NewInt(int64(b))).Int64()) lcm := a*b/gcd ans := Search(min(a*k,b*k)+2, func(i int) bool { return i/a+i/b-i/lcm >= k }) Println(ans) } /* 考察 AまたはBの倍数である正整数Nがあって 1~Nまでで K = Aの倍数の個数 + Bの倍数の個数 - LCM(A,B)の倍数の個数 となるようなNを見つけろってこと? Aの倍数がK個、小さいほうからK個目の値は A*K Bの倍数がK個、小さいほうからK個目の値は B*K で N <= min(A*K,B*K) が成り立つ 二分探索、だよね? */