結果
| 問題 | No.251 大きな桁の復習問題(1) |
| コンテスト | |
| ユーザー |
tenten
|
| 提出日時 | 2021-01-20 18:20:50 |
| 言語 | Java (openjdk 25.0.2) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 993 bytes |
| 記録 | |
| コンパイル時間 | 1,604 ms |
| コンパイル使用メモリ | 87,456 KB |
| 実行使用メモリ | 56,588 KB |
| 最終ジャッジ日時 | 2026-05-29 09:54:06 |
| 合計ジャッジ時間 | 9,076 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge2_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | -- * 3 |
| other | AC * 9 TLE * 1 -- * 11 |
ソースコード
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;
}
ArrayList<Integer> m = new ArrayList<>();
for (char c : sc.next().toCharArray()) {
m.add(c - '0');
}
System.out.println(pow(n, m));
}
static long pow(long x, ArrayList<Integer> p) {
if (p.size() == 0) {
return 1;
} else if (p.get(p.size() - 1) % 2 == 0) {
int y = 0;
for (int i = 0; i < p.size(); i++) {
y *= 10;
int z = y + p.get(i);
y = z % 2;
z /= 2;
p.set(i, z);
}
if (p.get(0) == 0) {
p.remove(0);
}
return pow(x * x % MOD, p);
} else {
p.set(p.size() - 1, p.get(p.size() - 1) - 1);
return pow(x, p) * x % MOD;
}
}
}
tenten