1. paizaラーニングトップ
  2. レベルアップ問題集
  3. 繰り返し二乗法・ダブリングメニュー(言語選択)
  4. 問題一覧 F#(Beta)編
  5. 繰り返し二乗法 F#(Beta)編

繰り返し二乗法・ダブリングメニューのサムネイル
繰り返し二乗法 F#(Beta)編(paizaランク A 相当)

問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!

問題

下記の問題をプログラミングしてみよう!

では、実際に繰り返し二乗法を使ってみましょう。

繰り返し二乗法は、次のようなアルゴリズムです。
ここでは、x^n を計算することを考えます。
・ result = 1 とする。
・ i = 1 から k まで、以下の処理を繰り返す。(k は最大のビット数とします。)
1. n の下から i 番目のビットが 1 であるならば、result <- result・x とする。
2. x <- x・x とする。

整数 x と整数 n が与えられるので、x^n を高速に計算してください。
ただし、答えは非常に大きくなる可能性があるため、10000000 = 10^7 で割ったあまりを出力してください。

入力される値

x n


・ 1 行目に整数 x と整数 n が半角スペース区切りで与えられます。


入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。 標準入力からの値取得方法はこちらをご確認ください
期待する出力

x^n を 10000000 で割ったあまりを 1 行で出力してください。

また、末尾に改行を入れ、余計な文字を含んではいけません。

条件

すべてのテストケースにおいて、以下の条件をみたします。

・ 入力はすべて整数
・ 0 ≦ x, n < 2^20
・ x = 0 のとき、n = 0 ではない

入力例1

2 11

出力例1

2048

入力例2

10001 2

出力例2

20001

問題一覧へ戻る

ページの先頭へ戻る