諦めない
● 結局
○ number 型同士の計算のまま
○ 計算過程で一度も2^53-1を上回ることなく
○ x * y % p (x, y, p は 10^9 以下の正の整数)を計算
できればいいということ
● やってやろうじゃないか!
16
Slide 17
Slide 17 text
式変形①
● 各数値は 10^9 < 2^30 なので高々30bit
● xを32bit整数型で表したときの上位12bitをa, 下位20bitをb として
x = a * 2^20 + b (a<2^10, b< 2^20)
と表す
● 同様に
y = c * 2^20 + d (c<2^10, d< 2^20)
と表す
17
Slide 18
Slide 18 text
式変形②
x * y % p = (a * 2^20 + b) * (c * 2^20 + d) % p
= { a * c * (2^40) + a * 2^20 * d + b * (c * 2^20 + d) } % p
= {a * c * (2^40 % p) + a * 2^20 * d + b * (c * 2^20 + d) } % p
18
Slide 19
Slide 19 text
式変形②
x * y % p = (a * 2^20 + b) * (c * 2^20 + d) % p
= { a * c * (2^40) + a * 2^20 * d + b * (c * 2^20 + d) } % p
= {a * c * (2^40 % p) + a * 2^20 * d + b * (c * 2^20 + d) } % p
● a * c * (2^40 % p) < 2^10 * 2^10 * 2^30 = 2^50
● a * 2^20 * d < 2^10 * 2^20 * 2*20 = 2^50
● b * (c * 2^20 + d) < 2^20 * 2^30 = 2^50
19
Slide 20
Slide 20 text
式変形②
x * y % p = (a * 2^20 + b) * (c * 2^20 + d) % p
= { a * c * (2^40) + a * 2^20 * d + b * (c * 2^20 + d) } % p
= {a * c * (2^40 % p) + a * 2^20 * d + b * (c * 2^20 + d) } % p
● a * c * (2^40 % p) < 2^10 * 2^10 * 2^30 = 2^50
● a * 2^20 * d < 2^10 * 2^20 * 2*20 = 2^50
● b * (c * 2^20 + d) < 2^20 * 2^30 = 2^50
できたぁぁ!!!!!!!!
20