質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Q&A

解決済

1回答

1126閲覧

乗算で余りを計算するまえにそれぞれの値の余りを求めた場合について

afushi

総合スコア2

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

0グッド

1クリップ

投稿2021/09/08 08:40

編集2021/09/08 10:29

前提・実現したいこと

https://atcoder.jp/contests/atc002/tasks/atc002_b
についての質問です

n,m,pが与えられ、n ^ p mod m を求める問題です。
pow(n,p,m)とpow(n%m, p%m, m)の値が違う場合があるのですが理解できていません。
違う例)n,m,p = 123456789, 234567894, 6574837563712

(a*b) mod m = {(a mod m) * (b mod m)} mod m
であるならばpow(n,p,m) == pow(n%m, p%m, m)のように思えるのですが、なにか見落としているのだとわかっているのですが、理解できていません。

べき算の場合は計算してから余りを求めないといけないのでしょうか。

こういうものだ、ということであればそれで構わないのですが、自分が見落としている点などがありましたらご指摘お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2021/09/08 08:55

n ^ p は n * p ではありません。n を p 回かけたものです。 p % m を求めるのは意味がありません。 繰り返し二乗法について非常にわかりやすい解説がありますので読んでください。
YT0014

2021/09/08 09:12

乗算は、一般には、掛け算を意味します。べき乗計算の意味だと思われますが、誤解が起きないように、他の用語への書き換えをお勧めします。
fana

2021/09/08 09:26

うおおおお,私しか「?」ってなってないみたいで恥ずかしいけど,まず What is "pow" ? と問うぜ! pow( n,p,m ) = n^p mod m という話だと思って良い?
afushi

2021/09/08 10:30

pow( n,p,m ) = n^p mod m であってます。 乗算からべき乗に変更しました。 ご指摘ありがとうございます。
Zuishin

2021/09/08 10:38

乗算からべき乗に変更したことで解決しないのか。 べき乗でその法則が成り立つと、どこの資料に書いてあるんですか? 引用してください。
fana

2021/09/08 10:42 編集

n ^ p = { n^(p-1) * n } と考えて,ここに > (a*b) mod m = {(a mod m) * (b mod m)} mod m を適用することを考えます. で,同様に n^(p-1) もまた,{ n^(p-2) * n } として… と繰り返していくことを考えると, > (a*b) mod m = {(a mod m) * (b mod m)} mod m の末尾にある mod m の計算が毎度毎度必要となるように思えます. (私の頭だとここで行き詰ります) この状態から > pow(n%m, p%m, m) のようにできる,という結論までの間にちょっと大きな飛躍があるように感じるので,この間の部分をどう考えた話なのか,というのを可能であれば少し説明頂けると良いのではないかと存じます.
Zuishin

2021/09/08 11:21 編集

「その法則」が通じないかもしれないので書き直します。 (5 * 4) % 3 = ((5 % 3) * (4 % 3)) % 3 = 2 乗算ならこれが成り立ちます。 (5 ^ 4) % 3 = 625 % 3 = 1 ((5 % 3) ^ (4 % 3)) % 3 = (2 ^ 1) % 3 = 2 1 ≠ 2 べき乗だと必ずしも成り立ちません。 べき乗でも成り立つとどこに書いてあるんですか?
Zuishin

2021/09/08 11:21

解決したけど、わかったんだかわからないんだか。
guest

回答1

0

ベストアンサー

言葉がまず間違ってます。
「乗算」は n * p です。
「べき乗」は n ^ p です。

一般に、 (n ^ p) mod m と (n mod m)^(p mod m) mod m は一致しません。
数学的にはオイラーの定理で示されるように、 n≠0 ならば n^φ(m) ≡ 1 mod m なので p - (p mod m) が φ(m) の倍数であれば一致するでしょう。

投稿2021/09/08 09:01

mather

総合スコア6759

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問