累乗って,いままで,

inline void pow(int a[N], long long n) {
if (n == 1) {
return;
} else if (n%2) {
int b[N];
REP (i, N) b[i] = a[i];
pow(b, n-1), mul(a, b);
} else {
mul(a, a), pow(a, n/2);
}
}

こんな,ふうに書いていた.

(配列を累乗しているのは大人の事情です.)

しかし,実は,別の書きかたもあった.

// initialize b = 1;
while (n>1) {
if (n%2) mul(b, a);
mul(a,a), n /= 2;
}
mul(a,b);

こっちのほうが,断然短くて,見た目はカッコイイ.

# 可読性は悪いような...