ARC111Aについて
正整数 N,M が与えられます。⌊10^N/M⌋ を Mで割った余りを求めてください。
こちらの問題について考えています。
解くことができなかったため、他の方の解答を参考にしていますが、実装で理解できない部分があります。
powbod
のmethod内で &
演算とn>>=
演算をしていますが、これらの演算がどのような意味を持っているのかがわかっていません。
おわかりの方がいましたら教えていただきたいです。よろしくお願いいたします。
admin解説
C++
1#include <bits/stdc++.h> 2using namespace std; 3using ll = long long; 4 5// a^n % modを求める 6int powmod(int a, ll n, int mod) { 7 int pm = 1; 8 while (n > 0) { 9 if (n & 1) pm = (ll)pm * a % mod; # ① 10 a = (ll)a * a % mod; 11 n >>= 1; # ② 12 } 13 return pm; 14} 15 16 17int main() { 18 ll n, m; 19 cin >> n >> m; 20 printf("%d\n", powmod(10, n, m * m) / m % m); 21 return 0; 22}
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。