【最大公約数】STEP: 2 べき乗の計算 (paizaランク C 相当) 解答例 – PHP編【Aランクレベルアップメニュー】
【Aランクレベルアップメニュー】 > 【最大公約数】STEP: 2 べき乗の計算 (paizaランク C 相当)
※リンク先へ移動する為には「paiza」へのログインが必要です。
アルゴリズムの問題は難しいというか、ギミックを知ってないといくら頑張って考えても答えを導くことはできないと感じます(;^ω^)
今回は「繰り返し二乗法」というアルゴリズムを使用します。PHPでのサンプルが見つからなかったので少しアレンジしてます。あんまりいいコードじゃないと思いますが、これで通過できちゃった(;’∀’)
アルゴリズムのギミックも理解できてないですし、このアルゴリズム関連の問題本当難しい…。これがランクCとか…嘘だッ!
解答例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php $n = trim(fgets(STDIN)); $m = 1000003; $p = 2; $counter = 1; $ans = 1; $pow = array_reverse(str_split(decbin($n))); $count = count($pow); for($i = 0;$i < $count;$i++){ //繰り返し二重法 if($pow[$i] == 1){ $ans = ($ans * $p) % $m; } $counter++; $p = $p * $p % $m; } echo $ans; ?> |
