SlideShare a Scribd company logo
四則演算




原案、問題文:宮村
解答:宮村、橋本
 解説:宮村
問題概要



   数が N(≦10^5) 個与えられるので、足したり引いた
    り掛けたり割ったりして、最後の値を答えなさい。
   ただし計算結果は -2^31 以上 2^31 未満の整数に
    なることが保証されている。
ナイーブな解法


   Double 型などの浮動小数点数で近似する?
   誤差やオーバーフロー、アンダーフローで WA 。

   多倍長整数を用いて有理数の計算を実装する ?
   多倍長整数の計算は時間計算量も空間計算量も
    O(1) ではないので TLE する。
着眼点



   答えは -2^31 以上 2^31 未満の整数になることが
    保証されていることに目をつける。
   答えはたかだか 2^32 通りしかない。
解法


   例えば、 2^32 より大きな素数 p をひとつ固定し
    て、 MOD p で計算することにしてみよう。
   割り算は、 x / y = x * y^(p-2) で計算する
    ( フェルマーの小定理 ) 。
解法

   MOD p で計算した結果、 X[N]=z になったとする。
    1. 0≦z≦2^31-1 になったら z が答。
    2. 2^31≦z なら z-p が答。

-2^31     0       2^31   p-2^31   p          Z



                                      Z/pZ
証明

   Q[p] = {x in Q ; x = a/b となるような整数 a, b が
    存在する。ただし b は p の倍数でない }
   このとき、 Q[p] は和や積について閉じている。
    ( 分母に p を含まない数同士の足し算や掛け算で
     新しく分母に p が出てくることはない )
   |Y[i]| ≦ 10^6 なので、 X[i] in Q[p] になる。
証明
   f を Q[p] から Z/pZ への写像で、 x = a/b(a,b は整
    数、 b は p の倍数でない ) を a*b^(p-2) に写すもの
    とする、つまり
    f(a/b) = a * b^(p-2)
   この関数は well-defined であることが示せる。
    つまり x=a/b の表し方は複数あるが、どのように表
    したとしても行き先は変わらない。
証明

   写像 f は以下の性質を満たす。
    1. f(x + y) = f(x) + f(y)
    2. f(x * y) = f(x) * f(y)
   これは計算することにより簡単に確かめることがで
    きる。
証明

   この性質を満たすと何が嬉しいのか?
   減算や除算は加算や乗算で置き換えて考える。
   f(X[N]) = f(X[N-1] op[N] Y[N])
           = f(X[N-1]) op[N] f(Y[N])
           = f(X[N-2] op[N-1] Y[N-1]) op[N] f(Y[N])
           = f(X[N-2]) op[N-1] f(Y[N-1]) op[N] f(Y[N])
           …
           = f(X[0]) op[1] f(Y[1]) … op[N] f(Y[N])
   これで全て MOD p で考えてよいことが示された。
実装上の注意

   p は 2^32 より大きい素数である必要があるので、
    積をとるときオーバーフローする可能性がある。
   オーバーフローを回避しなければならない。

   Java で BigInteger を使ってもよい。
    意外に早くて十分に間に合う。
    modInverse(mod) という便利なメソッドが…
実装上の注意

   多倍長整数を使わなくてもオーバーフローは回避
    できる。
   掛け算をバイナリ法で実装しなおす ?
     → 計算量 O(N* (log p)^2) でやや重い。
        通すには定数倍最適化が必要。
   p を 10^12 以下にとれば、 M を 10^6 程度にとり、
    x * y = ((x * (y / M) % p)*M + x * (y % M)) % p
    とすることでオーバーフローを回避できる。
別解

   オンサイト参加された exPacks さんの解法。

   オーバーフローしない程度の大きさ (10^8 とか ) の
    素数を 2 つ用意する。 (P, Q とおく )
   X[N] を mod P, mod Q で計算する。
   中国剰余定理で X[N] mod P*Q を計算する。
応用例


   整数の行列が与えられて行列式を計算したいとき、
    掃き出し法を適用するときに除算が楽に実装でき
    る。
   最終的に整数になることが分かっている有理数が
    楽に扱えてうれしいことがあるかもしれない。
応用問題 ?
   この問題の input validator を作れ。
   つまり、この問題の計算結果がきちんと signed
    32bit int の範囲に収まる整数になっているかどうか
    確かめよ。

   乱択アルゴリズムを用いることにより高い確率で確
    かめることができる?
   適当に素数 p をとって計算結果 z が
    2^31≦z<p-2^31 となったら棄却できる。
   いろんな素数で試せば OK ?
解答例

   宮村: C++
     60 行 773byte

   橋本: Java (BigInteger を使用 )
     29 行 776byte

More Related Content

What's hot

Permutation
PermutationPermutation
Permutation
oupc
 
Seminar on Quantum Computation & Quantum Information part19
Seminar on Quantum Computation & Quantum Information part19Seminar on Quantum Computation & Quantum Information part19
Seminar on Quantum Computation & Quantum Information part19
Yuichi Adachi
 
ロマ数16 simizut
ロマ数16 simizutロマ数16 simizut
ロマ数16 simizut
Tatsuki SHIMIZU
 
Joi模擬予選2013 6番解説
Joi模擬予選2013 6番解説Joi模擬予選2013 6番解説
Joi模擬予選2013 6番解説
DEGwer
 
Estimating Mutual Information for Discrete‐Continuous Mixtures 離散・連続混合の相互情報量の推定
Estimating Mutual Information for Discrete‐Continuous Mixtures 離散・連続混合の相互情報量の推定Estimating Mutual Information for Discrete‐Continuous Mixtures 離散・連続混合の相互情報量の推定
Estimating Mutual Information for Discrete‐Continuous Mixtures 離散・連続混合の相互情報量の推定
Yuya Takashina
 
公開鍵暗号2: NP困難性
公開鍵暗号2: NP困難性公開鍵暗号2: NP困難性
公開鍵暗号2: NP困難性
Joe Suzuki
 
会津合宿2015Day3:D問題
会津合宿2015Day3:D問題会津合宿2015Day3:D問題
ハウスドルフと閉グラフ
ハウスドルフと閉グラフハウスドルフと閉グラフ
ハウスドルフと閉グラフ
政孝 鍋島
 
JSIAM_2019_9_4
JSIAM_2019_9_4JSIAM_2019_9_4
JSIAM_2019_9_4
KoutaFunakoshi
 
Donuts プロコンチャレンジ2014
Donuts プロコンチャレンジ2014Donuts プロコンチャレンジ2014
Donuts プロコンチャレンジ2014
kuno4n
 
Sclalaz Kleisli の使い方
Sclalaz Kleisli の使い方Sclalaz Kleisli の使い方
Sclalaz Kleisli の使い方
Masaru Watanabe
 
楕円形の連結を使った最小値問題
楕円形の連結を使った最小値問題楕円形の連結を使った最小値問題
楕円形の連結を使った最小値問題
政孝 鍋島
 
楕円形の連結を使った最小値問題
楕円形の連結を使った最小値問題楕円形の連結を使った最小値問題
楕円形の連結を使った最小値問題
nabeshimamasataka
 
動的計画法を極める!
動的計画法を極める!動的計画法を極める!
Donutsプロコンチャレンジ 2015 解説
Donutsプロコンチャレンジ 2015 解説Donutsプロコンチャレンジ 2015 解説
Donutsプロコンチャレンジ 2015 解説
kuno4n
 

What's hot (17)

Permutation
PermutationPermutation
Permutation
 
Seminar on Quantum Computation & Quantum Information part19
Seminar on Quantum Computation & Quantum Information part19Seminar on Quantum Computation & Quantum Information part19
Seminar on Quantum Computation & Quantum Information part19
 
ロマ数16 simizut
ロマ数16 simizutロマ数16 simizut
ロマ数16 simizut
 
Joi模擬予選2013 6番解説
Joi模擬予選2013 6番解説Joi模擬予選2013 6番解説
Joi模擬予選2013 6番解説
 
Estimating Mutual Information for Discrete‐Continuous Mixtures 離散・連続混合の相互情報量の推定
Estimating Mutual Information for Discrete‐Continuous Mixtures 離散・連続混合の相互情報量の推定Estimating Mutual Information for Discrete‐Continuous Mixtures 離散・連続混合の相互情報量の推定
Estimating Mutual Information for Discrete‐Continuous Mixtures 離散・連続混合の相互情報量の推定
 
RUPC2017:Bの解説
RUPC2017:Bの解説RUPC2017:Bの解説
RUPC2017:Bの解説
 
公開鍵暗号2: NP困難性
公開鍵暗号2: NP困難性公開鍵暗号2: NP困難性
公開鍵暗号2: NP困難性
 
No Title
No TitleNo Title
No Title
 
会津合宿2015Day3:D問題
会津合宿2015Day3:D問題会津合宿2015Day3:D問題
会津合宿2015Day3:D問題
 
ハウスドルフと閉グラフ
ハウスドルフと閉グラフハウスドルフと閉グラフ
ハウスドルフと閉グラフ
 
JSIAM_2019_9_4
JSIAM_2019_9_4JSIAM_2019_9_4
JSIAM_2019_9_4
 
Donuts プロコンチャレンジ2014
Donuts プロコンチャレンジ2014Donuts プロコンチャレンジ2014
Donuts プロコンチャレンジ2014
 
Sclalaz Kleisli の使い方
Sclalaz Kleisli の使い方Sclalaz Kleisli の使い方
Sclalaz Kleisli の使い方
 
楕円形の連結を使った最小値問題
楕円形の連結を使った最小値問題楕円形の連結を使った最小値問題
楕円形の連結を使った最小値問題
 
楕円形の連結を使った最小値問題
楕円形の連結を使った最小値問題楕円形の連結を使った最小値問題
楕円形の連結を使った最小値問題
 
動的計画法を極める!
動的計画法を極める!動的計画法を極める!
動的計画法を極める!
 
Donutsプロコンチャレンジ 2015 解説
Donutsプロコンチャレンジ 2015 解説Donutsプロコンチャレンジ 2015 解説
Donutsプロコンチャレンジ 2015 解説
 

Viewers also liked

Division
DivisionDivision
Division
oupc
 
Palin
PalinPalin
Palin
oupc
 
Trip
TripTrip
Trip
oupc
 
Onde houver fé
Onde houver féOnde houver fé
Onde houver fé
Eduardo Maciel
 
Rmq
RmqRmq
Rmq
oupc
 
Sharp2sat
Sharp2satSharp2sat
Sharp2sat
oupc
 

Viewers also liked (8)

A
AA
A
 
Division
DivisionDivision
Division
 
Palin
PalinPalin
Palin
 
Trip
TripTrip
Trip
 
Onde houver fé
Onde houver féOnde houver fé
Onde houver fé
 
Icr s700 rm-om_french
Icr s700 rm-om_frenchIcr s700 rm-om_french
Icr s700 rm-om_french
 
Rmq
RmqRmq
Rmq
 
Sharp2sat
Sharp2satSharp2sat
Sharp2sat
 

Similar to Four op

PRML 10.4 - 10.6
PRML 10.4 - 10.6PRML 10.4 - 10.6
PRML 10.4 - 10.6
Akira Miyazawa
 
2013computer s1
2013computer s12013computer s1
2013computer s1
munich1502
 
x^2+ny^2の形で表せる素数の法則と類体論
x^2+ny^2の形で表せる素数の法則と類体論x^2+ny^2の形で表せる素数の法則と類体論
x^2+ny^2の形で表せる素数の法則と類体論
Junpei Tsuji
 
複素数・四元数と図形の回転
複素数・四元数と図形の回転複素数・四元数と図形の回転
複素数・四元数と図形の回転
Yoshihiro Mizoguchi
 
PRML 第4章
PRML 第4章PRML 第4章
PRML 第4章
Akira Miyazawa
 
20170327_レムニスケートにまつわる色々な計算
20170327_レムニスケートにまつわる色々な計算20170327_レムニスケートにまつわる色々な計算
20170327_レムニスケートにまつわる色々な計算
matsumoring
 
半正定値計画問題と最大カット Sedemifinite Programming and Approximation Algorithm for Maxcu...
半正定値計画問題と最大カット Sedemifinite Programming and Approximation Algorithm for Maxcu...半正定値計画問題と最大カット Sedemifinite Programming and Approximation Algorithm for Maxcu...
半正定値計画問題と最大カット Sedemifinite Programming and Approximation Algorithm for Maxcu...
Yuya Masumura
 
Draftall
DraftallDraftall
ディジタル信号処理 課題解説(その3) 2014年度版
ディジタル信号処理 課題解説(その3) 2014年度版ディジタル信号処理 課題解説(その3) 2014年度版
ディジタル信号処理 課題解説(その3) 2014年度版
dsp_kyoto_2014
 
虚数は作れる!Swift で学ぶ複素数
虚数は作れる!Swift で学ぶ複素数虚数は作れる!Swift で学ぶ複素数
虚数は作れる!Swift で学ぶ複素数
Taketo Sano
 
Sec15 dynamic programming
Sec15 dynamic programmingSec15 dynamic programming
Sec15 dynamic programming
Keisuke OTAKI
 
A summary on “On choosing and bounding probability metrics”
A summary on “On choosing and bounding probability metrics”A summary on “On choosing and bounding probability metrics”
A summary on “On choosing and bounding probability metrics”
Kota Matsui
 
汎化性能測定
汎化性能測定汎化性能測定
汎化性能測定
Masanori Yamada
 
Stochastic complexities of reduced rank regression証明概略
 Stochastic complexities of reduced rank regression証明概略 Stochastic complexities of reduced rank regression証明概略
Stochastic complexities of reduced rank regression証明概略
Xiangze
 
代数的実数とCADの実装紹介
代数的実数とCADの実装紹介代数的実数とCADの実装紹介
代数的実数とCADの実装紹介
Masahiro Sakai
 
公開鍵暗号(3): 離散対数問題
公開鍵暗号(3): 離散対数問題公開鍵暗号(3): 離散対数問題
公開鍵暗号(3): 離散対数問題
Joe Suzuki
 
2016年度秋学期 応用数学(解析) 第5回 微分方程式とは,変数分離形 (2016. 10. 27)
2016年度秋学期 応用数学(解析) 第5回 微分方程式とは,変数分離形 (2016. 10. 27)2016年度秋学期 応用数学(解析) 第5回 微分方程式とは,変数分離形 (2016. 10. 27)
2016年度秋学期 応用数学(解析) 第5回 微分方程式とは,変数分離形 (2016. 10. 27)
Akira Asano
 
導来代数幾何入門
導来代数幾何入門導来代数幾何入門
導来代数幾何入門
Naoya Umezaki
 
2022年度秋学期 応用数学(解析) 第6回 変数分離形の変形 (2022. 10. 27)
2022年度秋学期 応用数学(解析) 第6回 変数分離形の変形 (2022. 10. 27) 2022年度秋学期 応用数学(解析) 第6回 変数分離形の変形 (2022. 10. 27)
2022年度秋学期 応用数学(解析) 第6回 変数分離形の変形 (2022. 10. 27)
Akira Asano
 
混合ガウスモデルとEMアルゴリスム
混合ガウスモデルとEMアルゴリスム混合ガウスモデルとEMアルゴリスム
混合ガウスモデルとEMアルゴリスム
貴之 八木
 

Similar to Four op (20)

PRML 10.4 - 10.6
PRML 10.4 - 10.6PRML 10.4 - 10.6
PRML 10.4 - 10.6
 
2013computer s1
2013computer s12013computer s1
2013computer s1
 
x^2+ny^2の形で表せる素数の法則と類体論
x^2+ny^2の形で表せる素数の法則と類体論x^2+ny^2の形で表せる素数の法則と類体論
x^2+ny^2の形で表せる素数の法則と類体論
 
複素数・四元数と図形の回転
複素数・四元数と図形の回転複素数・四元数と図形の回転
複素数・四元数と図形の回転
 
PRML 第4章
PRML 第4章PRML 第4章
PRML 第4章
 
20170327_レムニスケートにまつわる色々な計算
20170327_レムニスケートにまつわる色々な計算20170327_レムニスケートにまつわる色々な計算
20170327_レムニスケートにまつわる色々な計算
 
半正定値計画問題と最大カット Sedemifinite Programming and Approximation Algorithm for Maxcu...
半正定値計画問題と最大カット Sedemifinite Programming and Approximation Algorithm for Maxcu...半正定値計画問題と最大カット Sedemifinite Programming and Approximation Algorithm for Maxcu...
半正定値計画問題と最大カット Sedemifinite Programming and Approximation Algorithm for Maxcu...
 
Draftall
DraftallDraftall
Draftall
 
ディジタル信号処理 課題解説(その3) 2014年度版
ディジタル信号処理 課題解説(その3) 2014年度版ディジタル信号処理 課題解説(その3) 2014年度版
ディジタル信号処理 課題解説(その3) 2014年度版
 
虚数は作れる!Swift で学ぶ複素数
虚数は作れる!Swift で学ぶ複素数虚数は作れる!Swift で学ぶ複素数
虚数は作れる!Swift で学ぶ複素数
 
Sec15 dynamic programming
Sec15 dynamic programmingSec15 dynamic programming
Sec15 dynamic programming
 
A summary on “On choosing and bounding probability metrics”
A summary on “On choosing and bounding probability metrics”A summary on “On choosing and bounding probability metrics”
A summary on “On choosing and bounding probability metrics”
 
汎化性能測定
汎化性能測定汎化性能測定
汎化性能測定
 
Stochastic complexities of reduced rank regression証明概略
 Stochastic complexities of reduced rank regression証明概略 Stochastic complexities of reduced rank regression証明概略
Stochastic complexities of reduced rank regression証明概略
 
代数的実数とCADの実装紹介
代数的実数とCADの実装紹介代数的実数とCADの実装紹介
代数的実数とCADの実装紹介
 
公開鍵暗号(3): 離散対数問題
公開鍵暗号(3): 離散対数問題公開鍵暗号(3): 離散対数問題
公開鍵暗号(3): 離散対数問題
 
2016年度秋学期 応用数学(解析) 第5回 微分方程式とは,変数分離形 (2016. 10. 27)
2016年度秋学期 応用数学(解析) 第5回 微分方程式とは,変数分離形 (2016. 10. 27)2016年度秋学期 応用数学(解析) 第5回 微分方程式とは,変数分離形 (2016. 10. 27)
2016年度秋学期 応用数学(解析) 第5回 微分方程式とは,変数分離形 (2016. 10. 27)
 
導来代数幾何入門
導来代数幾何入門導来代数幾何入門
導来代数幾何入門
 
2022年度秋学期 応用数学(解析) 第6回 変数分離形の変形 (2022. 10. 27)
2022年度秋学期 応用数学(解析) 第6回 変数分離形の変形 (2022. 10. 27) 2022年度秋学期 応用数学(解析) 第6回 変数分離形の変形 (2022. 10. 27)
2022年度秋学期 応用数学(解析) 第6回 変数分離形の変形 (2022. 10. 27)
 
混合ガウスモデルとEMアルゴリスム
混合ガウスモデルとEMアルゴリスム混合ガウスモデルとEMアルゴリスム
混合ガウスモデルとEMアルゴリスム
 

More from oupc

Comment
CommentComment
Comment
oupc
 
Kth
KthKth
Kth
oupc
 
Cube
CubeCube
Cube
oupc
 
One
OneOne
One
oupc
 
Magical
MagicalMagical
Magical
oupc
 
Gcd
GcdGcd
Gcd
oupc
 
Replace
ReplaceReplace
Replace
oupc
 
Goto
GotoGoto
Goto
oupc
 
Sanpo
SanpoSanpo
Sanpo
oupc
 
Paren
ParenParen
Paren
oupc
 
Sort
SortSort
Sort
oupc
 
Segpair
SegpairSegpair
Segpair
oupc
 
Knapsack
KnapsackKnapsack
Knapsack
oupc
 
Game
GameGame
Game
oupc
 
Divisor
DivisorDivisor
Divisor
oupc
 
Anagram
AnagramAnagram
Anagram
oupc
 
Comment
CommentComment
Comment
oupc
 

More from oupc (18)

Comment
CommentComment
Comment
 
Kth
KthKth
Kth
 
Cube
CubeCube
Cube
 
One
OneOne
One
 
1
11
1
 
Magical
MagicalMagical
Magical
 
Gcd
GcdGcd
Gcd
 
Replace
ReplaceReplace
Replace
 
Goto
GotoGoto
Goto
 
Sanpo
SanpoSanpo
Sanpo
 
Paren
ParenParen
Paren
 
Sort
SortSort
Sort
 
Segpair
SegpairSegpair
Segpair
 
Knapsack
KnapsackKnapsack
Knapsack
 
Game
GameGame
Game
 
Divisor
DivisorDivisor
Divisor
 
Anagram
AnagramAnagram
Anagram
 
Comment
CommentComment
Comment
 

Four op

  • 2. 問題概要  数が N(≦10^5) 個与えられるので、足したり引いた り掛けたり割ったりして、最後の値を答えなさい。  ただし計算結果は -2^31 以上 2^31 未満の整数に なることが保証されている。
  • 3. ナイーブな解法  Double 型などの浮動小数点数で近似する?  誤差やオーバーフロー、アンダーフローで WA 。  多倍長整数を用いて有理数の計算を実装する ?  多倍長整数の計算は時間計算量も空間計算量も O(1) ではないので TLE する。
  • 4. 着眼点  答えは -2^31 以上 2^31 未満の整数になることが 保証されていることに目をつける。  答えはたかだか 2^32 通りしかない。
  • 5. 解法  例えば、 2^32 より大きな素数 p をひとつ固定し て、 MOD p で計算することにしてみよう。  割り算は、 x / y = x * y^(p-2) で計算する ( フェルマーの小定理 ) 。
  • 6. 解法  MOD p で計算した結果、 X[N]=z になったとする。 1. 0≦z≦2^31-1 になったら z が答。 2. 2^31≦z なら z-p が答。 -2^31 0 2^31 p-2^31 p Z Z/pZ
  • 7. 証明  Q[p] = {x in Q ; x = a/b となるような整数 a, b が 存在する。ただし b は p の倍数でない }  このとき、 Q[p] は和や積について閉じている。 ( 分母に p を含まない数同士の足し算や掛け算で  新しく分母に p が出てくることはない )  |Y[i]| ≦ 10^6 なので、 X[i] in Q[p] になる。
  • 8. 証明  f を Q[p] から Z/pZ への写像で、 x = a/b(a,b は整 数、 b は p の倍数でない ) を a*b^(p-2) に写すもの とする、つまり f(a/b) = a * b^(p-2)  この関数は well-defined であることが示せる。 つまり x=a/b の表し方は複数あるが、どのように表 したとしても行き先は変わらない。
  • 9. 証明  写像 f は以下の性質を満たす。 1. f(x + y) = f(x) + f(y) 2. f(x * y) = f(x) * f(y)  これは計算することにより簡単に確かめることがで きる。
  • 10. 証明  この性質を満たすと何が嬉しいのか?  減算や除算は加算や乗算で置き換えて考える。  f(X[N]) = f(X[N-1] op[N] Y[N]) = f(X[N-1]) op[N] f(Y[N]) = f(X[N-2] op[N-1] Y[N-1]) op[N] f(Y[N]) = f(X[N-2]) op[N-1] f(Y[N-1]) op[N] f(Y[N]) … = f(X[0]) op[1] f(Y[1]) … op[N] f(Y[N])  これで全て MOD p で考えてよいことが示された。
  • 11. 実装上の注意  p は 2^32 より大きい素数である必要があるので、 積をとるときオーバーフローする可能性がある。  オーバーフローを回避しなければならない。  Java で BigInteger を使ってもよい。 意外に早くて十分に間に合う。 modInverse(mod) という便利なメソッドが…
  • 12. 実装上の注意  多倍長整数を使わなくてもオーバーフローは回避 できる。  掛け算をバイナリ法で実装しなおす ? → 計算量 O(N* (log p)^2) でやや重い。 通すには定数倍最適化が必要。  p を 10^12 以下にとれば、 M を 10^6 程度にとり、 x * y = ((x * (y / M) % p)*M + x * (y % M)) % p とすることでオーバーフローを回避できる。
  • 13. 別解  オンサイト参加された exPacks さんの解法。  オーバーフローしない程度の大きさ (10^8 とか ) の 素数を 2 つ用意する。 (P, Q とおく )  X[N] を mod P, mod Q で計算する。  中国剰余定理で X[N] mod P*Q を計算する。
  • 14. 応用例  整数の行列が与えられて行列式を計算したいとき、 掃き出し法を適用するときに除算が楽に実装でき る。  最終的に整数になることが分かっている有理数が 楽に扱えてうれしいことがあるかもしれない。
  • 15. 応用問題 ?  この問題の input validator を作れ。  つまり、この問題の計算結果がきちんと signed 32bit int の範囲に収まる整数になっているかどうか 確かめよ。  乱択アルゴリズムを用いることにより高い確率で確 かめることができる?  適当に素数 p をとって計算結果 z が 2^31≦z<p-2^31 となったら棄却できる。  いろんな素数で試せば OK ?
  • 16. 解答例  宮村: C++ 60 行 773byte  橋本: Java (BigInteger を使用 ) 29 行 776byte