結果
問題 | No.251 大きな桁の復習問題(1) |
ユーザー |
![]() |
提出日時 | 2021-01-20 18:41:56 |
言語 | Java (openjdk 23) |
結果 |
AC
|
実行時間 | 336 ms / 5,000 ms |
コード長 | 833 bytes |
コンパイル時間 | 2,945 ms |
コンパイル使用メモリ | 78,836 KB |
実行使用メモリ | 43,884 KB |
最終ジャッジ日時 | 2024-12-23 09:06:50 |
合計ジャッジ時間 | 9,340 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 21 |
ソースコード
import java.util.*;public class Main {static final int MOD = 129402307;public static void main (String[] args) {Scanner sc = new Scanner(System.in);long n = 0;for (char c : sc.next().toCharArray()) {n *= 10;n += c - '0';n %= MOD;}char[] arr = sc.next().toCharArray();int length = arr.length;long[] bases = new long[length];bases[length - 1] = n;long ans = pow(n, arr[length - 1] - '0');for (int i = length - 2; i >= 0; i--) {bases[i] = pow(bases[i + 1], 10);ans *= pow(bases[i], arr[i] - '0');ans %= MOD;}System.out.println(ans);}static long pow(long x, long p) {if (p == 0) {return 1;} else if (p % 2 == 0) {return pow(x * x % MOD, p / 2);} else {return pow(x, p - 1) * x % MOD;}}}