ストーリー
RSA 暗号は、世界で広く使われている公開鍵暗号アルゴリズムです。
高橋くんは自分でも RSA 暗号を使ってみようと思いました。
そのためには鍵を作ることが必要です。
RSA 暗号の鍵生成は以下のような手順で行います。
鍵生成
RSA 暗号では、鍵を生成するために適当な素数 p,q と、自然数 e を選びます。
自然数 n を、
と置きます。
ここで、 φ=ϕ(n)=(p−1)(q−1) とすると、 e は φ 未満の自然数で、 φ と互いに素である必要があります。( ϕ(n) はオイラーのφ関数 )
自然数 d を、
- d≡e−1modφ
と置きます。
φ は多くの場合合成数であるため、 d の計算は(拡張)ユークリッドの互除法により行います。
このようにして計算された値を使い、公開鍵と秘密鍵を作成することができます。
- 公開鍵: (n,e)
- 秘密鍵: (n,d)
問題文
相異なる素数 p,q と正整数 e が与えられます。
秘密鍵 (n,d) を生成し、 n と d を出力してください。
ただし、 n=pq とし、 d を d≡e−1mod(p−1)(q−1) となるような最小の非負整数とします。
制約
- 2≤p,q≤109
- p,q は素数であり、 p=q である
- 2≤e≤(p−1)(q−1)
- e と (p−1)(q−1) は互いに素である
- 入力はすべて整数である
入力
出力
- 1 行目に n を出力せよ。
- 2 行目に d を出力せよ。
入出力例
p=5,q=11,e=3 のとき、 n=55,d=27 となります。
入力例3
998244353 998244853 5
出力例3
996492287418565109
199298457084415181
出力は 32 ビット整数で表される範囲を超える可能性があります。