結果
| 問題 |
No.2125 Inverse Sum
|
| コンテスト | |
| ユーザー |
👑 potato167
|
| 提出日時 | 2022-11-17 19:41:31 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 866 bytes |
| コンパイル時間 | 2,102 ms |
| コンパイル使用メモリ | 200,100 KB |
| 最終ジャッジ日時 | 2025-02-08 20:53:51 |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 23 WA * 7 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
/*
N=an
M=am
1/N + 1/M = (n+m)/anm <-既約
P/Q=(n+m)/anm
a=(n+m)Q/nmP
*/
//Nの正の約数を列挙する
vector<long long> Divisors(long long N){
vector<long long> p,q;
long long i=1,K=0;
while(i*i<N){
if(N%i==0){
p.push_back(i);
q.push_back(N/i);
K++;
}
i++;
}
if(i*i==N) p.push_back(i);
for(int i=K-1;i>=0;i--){
p.push_back(q[i]);
}
return p;
}
int main() {
ll P,Q;
cin>>P>>Q;
auto div=Divisors(Q);
vector<pair<ll,ll>> ans;
for(auto x:div) for(auto y:div){
if(Q%(x*y)!=0) continue;
if(__gcd(x,y)!=1) continue;
ll X=(x+y)*Q;
ll Y=x*y*P;
if(X%Y!=0) continue;
ll a=X/Y;
ans.push_back({a*x,a*y});
}
cout<<ans.size()<<"\n";
for(auto x:ans) cout<<x.first<<" "<<x.second<<"\n";
}
potato167