16

重複の可能性:
mod 演算子をいつ使用するかを認識する

モジュラスの実用的な用途は何ですか? モジュロ除算が何であるかを知っています。私の頭に浮かぶ最初のシナリオは、それを使用して奇数と偶数を見つけ、計算をクロックすることです。しかし、他にどこで使用できますか?

4

9 に答える 9

25

私が見つけた最も一般的な用途は、配列インデックスを「ラップする」ことです。

たとえば、配列を繰り返し循環させたい場合は、次のように使用できます。

int a[10];
for (int i = 0; true; i = (i + 1) % 10)
{
  // ... use a[i] ...
}

iモジュロは、[0, 10) の範囲内にとどまることを保証します。

于 2010-08-28T08:06:32.377 に答える
8

私は通常、すべての反復ではなく、すべてのXループで何かを実行する必要がある場合に、タイトなループでそれらを使用します。

例:

int i;
for (i = 1; i <= 1000000; i++)
{
   do_something(i);
   if (i % 1000 == 0)
       printf("%d processed\n", i);
}
于 2010-08-28T09:11:58.363 に答える
6

数値を文字列として出力するには、数字の値を見つけるためのモジュラスが必要です。

string number_to_string(uint number) {
  string result = "";
  while (number != 0) {
    result = cast(char)((number % 10) + '0') ~ result;
    //                   ^^^^^^^^^^^
    number /= 10;
  }
  return result;
}
于 2010-08-28T08:06:19.480 に答える
5

国際銀行口座番号の管理番号については、mod97 手法.

nまた、反復後に何かを行うための大きなバッチでも。NHibernateの例を次に示します。

ISession session = sessionFactory.openSession();
ITransaction tx = session.BeginTransaction();

for ( int i=0; i<100000; i++ ) {
    Customer customer = new Customer(.....);
    session.Save(customer);
    if ( i % 20 == 0 ) { //20, same as the ADO batch size
        //Flush a batch of inserts and release memory:
        session.Flush();
        session.Clear();
    }
}

tx.Commit();
session.Close();
于 2010-08-28T09:57:57.040 に答える
5

モジュラス操作の用途の 1 つは、ハッシュ テーブルを作成する場合です。ハッシュ関数からの値を配列のインデックスに変換するために使用されます。(ハッシュ テーブルのサイズが 2 の累乗の場合、モジュラスはビット マスクで実行できますが、それでもモジュラス演算です。)

于 2010-08-28T08:11:39.843 に答える
3

ビット単位の演算子を持たない言語の場合、モジュラスを使用して数値の最下位 n ビットを取得できます。たとえば、x の下位 8 ビットを取得するには、次のようにします。

x % 256

これは次と同等です:

x & 255
于 2010-08-28T08:15:51.670 に答える
3
  • 暗号化。それだけでモジュラスのわいせつな割合を占めることになります (私は誇張していますが、要点はわかります)。

ウィキペディアのページも試してみてください。

モジュラー算術は、数論、群論、環論、結び目理論、抽象代数、暗号、コンピューター サイエンス、化学、視覚芸術、音楽芸術で参照されます。

私の経験では、十分に高度なアルゴリズムは、おそらく上記のトピックのもう 1 つに触れることになるでしょう。

于 2010-08-28T08:07:28.073 に答える
3

まあ、あなたがそれを見ることができる多くの視点があります。それを数学演算として見ている場合、それは単なるモジュロ除算です。% のようにこれを必要としない場合でも、減算を使用して達成することもできますが、すべてのプログラミング言語は非常に最適化された方法で実装しています。

また、剰余除算は、奇数と偶数の検索やクロック計算に限定されません。このモジュール操作を必要とするアルゴリズムは何百もあります。たとえば、暗号化アルゴリズムなどです。したがって、他の +、-、*、/ などのような一般的な数学操作です。

数学的な観点を除いて、さまざまな言語が組み込みデータ構造を定義するためにこのシンボルを使用します。Perl では%hash、プログラマーがハッシュを宣言したことを示すために使用されます。したがって、すべてはプログラミング言語の設計によって異なります。

したがって、% の使用のリストに追加できる他の多くの視点がまだあります。

于 2010-08-28T08:12:04.670 に答える
3

バッファリングされた通信の通常の実装では循環バッファが使用され、モジュラス演算でそれらを管理します。

于 2010-08-28T08:12:45.163 に答える