実現したいこと
10^k (mod M)の値を保持した配列を高速で求めたい
考えたこと
- 10^k = 10^(k-1) * 10
- 10^(k-1) * 10 (mod M) ≡ (10^(k-1) (mod M)) * (10 (mod M)) (mod M)
上式を使ってk=0から求めていける
C++
1const int MAX_DIGIT = 100; // 桁数の上限 2vector<int> a(MAX_DIGIT); // 10^k (mod M)の値を保持する配列 3a[0] = 1; 4for (int k = 1; k < MAX_DIGIT; k++) { 5 a[k] = a[k-1] * 10; 6 a[k] %= M; // 10^k (mod M) 7}
発生している問題
先ほどのコードで構築した配列a
と実際の答えが異なる
具体的には...
(long long int)pow(10, k) % M
が10^k (mod M)の値
C++
1for (int k = 0; k < 15; k++) { // 試験的にとりあえずk=0...14をやる 2 cout << (a[k] == (long long int)pow(10, k) % M) << endl; 3}
この出力が全て1
と出るはずなのだが、そうはならなかった
この原因が分かる方がいらっしゃいましたら、ご回答をお願いいたします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/31 19:02
退会済みユーザー
2019/12/31 19:07 編集
2019/12/31 19:16