#if !__INCLUDE_LEVEL__ #include __FILE__ // a + b がオーバーフローするならtrueを返す template 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; } //素数列挙 std::vector Eratosthenes( const int N ) { std::vector is_prime( N + 1 ); for( int i = 0; i <= N; i++ ) { is_prime[ i ] = true; } std::vector res; for( int i = 2; i <= N; i++ ) { if( is_prime[ i ] ) { for( int j = 2 * i; j <= N; j += i ) { is_prime[ j ] = false; } res.emplace_back( i ); } } return res; } // 素因数分解 // 460 = 2^2 x 5 x 23 の場合 // 返り値は {{2, 2}, {5, 1}, {23, 1}} vector > prime_factorize(long long N) { // 答えを表す可変長配列 vector > res; // √N まで試し割っていく for (long long p = 2; p * p <= N; ++p) { // N が p で割り切れないならばスキップ if (N % p != 0) { continue; } // N の素因数 p に対する指数を求める int e = 0; while (N % p == 0) { // 指数を 1 増やす ++e; // N を p で割る N /= p; } // 答えに追加 res.emplace_back(p, e); } // 素数が最後に残ることがありうる if (N != 1) { res.emplace_back(N, 1); } return res; } struct Solver { void solve() { int p,q;cin>>p>>q; int g=gcd(p,q); p/=g; q/=g; auto eq=enum_divisors(q); set st; rep(i,sz(eq))rep(j,sz(eq)){ st.insert(eq[i]*eq[j]); } V ans1,ans2; fore(i,st){ int l=i; int r=q*q/i; if((l+q)%p==0&&(r+q)%p==0){ int n=(l+q)/p; int m=(r+q)/p; ans1.emplace_back(n); ans2.emplace_back(m); } } cout< #include using namespace atcoder; // #include // #include // using namespace __gnu_pbds; using namespace std; #define int ll using ll=long long; using ld = long double; using uint = unsigned; using ull = unsigned long long; using P=pair; using TP=tuple; template using V = vector; template using max_heap = priority_queue; template using min_heap = priority_queue, greater<>>; #define FOR1(a) for (ll _ = 0; _ < ll(a); ++_) #define FOR2(i, a) for (ll i = 0; i < ll(a); ++i) #define FOR3(i, a, b) for (ll i = a; i < ll(b); ++i) #define FOR4(i, a, b, c) for (ll i = a; i < ll(b); i += (c)) #define FOR1_R(a) for (ll i = (a)-1; i >= ll(0); --i) #define FOR2_R(i, a) for (ll i = (a)-1; i >= ll(0); --i) #define FOR3_R(i, a, b) for (ll i = (b)-1; i >= ll(a); --i) #define FOR4_R(i, a, b, c) for (ll i = (b)-1; i >= ll(a); i -= (c)) #define overload4(a, b, c, d, e, ...) e #define rep(...) overload4(__VA_ARGS__, FOR4, FOR3, FOR2, FOR1)(__VA_ARGS__) #define rrep(...) overload4(__VA_ARGS__, FOR4_R, FOR3_R, FOR2_R, FOR1_R)(__VA_ARGS__) #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_popcountll((long long)(x))) #define elif else if #define mpa make_pair #define bit(n) (1LL<<(n)) #define LB(c, x) distance((c).begin(), lower_bound(all(c), (x))) #define UB(c, x) distance((c).begin(), upper_bound(all(c), (x))) #define UNIQUE(x) sort(all(x)), x.erase(unique(all(x)), x.end()) templatebool chmax(T &a, const T &b) { if (abool chmin(T &a, const T &b) { if (bistream& operator>>(istream&i,vector&v){rep(j,sz(v))i>>v[j];return i;} templatestring join(const T&v,const string& d=""){stringstream s;rep(i,sz(v))(i?s<ostream& operator<<(ostream&o,const vector&v){if(sz(v))o<istream& operator>>(istream&i,pair&v){return i>>v.first>>v.second;} templateostream& operator<<(ostream&o,const pair&v){return o<bool mins(T1& x,const T2&y){if(x>y){x=y;return true;}else return false;} templatebool maxs(T1& x,const T2&y){if(xTx dup(Tx x, Ty y){return (x+y-1)/y;} templatell suma(const vector&a){ll res(0);for(auto&&x:a)res+=x;return res;} templatell suma(const V>&a){ll res(0);for(auto&&x:a)res+=suma(x);return res;} templatevoid uni(T& a){sort(rng(a));a.erase(unique(rng(a)),a.end());} templatevoid prepend(vector&a,const T&x){a.insert(a.begin(),x);} const int INF = 1001001001; const ll INFL = 3e18; const int MAX = 2e6+5; #endif