問題タブ [modulo]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
iphone - How to make a modulo operation in objective-c / cocoa touch?
I have two CGFloat values, and want to calculate the modulo result. Or in other words: I want to know what's left if valueA is placed as much as possible into valueB.
So I just tried:
the compiler complains about the % and tells me: "invalid operands to binary %". Any idea?
c# - ループせずに System.TimeSpan 値を使用してモジュラス演算を実行するにはどうすればよいですか?
コード (C#/WPF) のパフォーマンスが非常に重要な部分を使用しており、可能な限り迅速に 2 つの System.TimeSpan 値の間でモジュラス演算を実行する必要があります。
このコードは 1 秒間に何千回も実行されるため、手動のループ計算を使用することは絶対に避けたいと考えています。
2 つの TimeSpans 間のモジュラスの考え方は少し奇妙に思えるかもしれません。説明させてください -
TimeSpan
A = 1 分 30 秒
TimeSpan B = 20 秒 があるとします。
一般的な操作とその妥当な結果のリストを次に示します。
A + B = (TimeSpan)1 分 50 秒
A - B = (TimeSpan)1 分 10 秒
A * B = 合理的な計算方法がないTimeSpan に整数を掛ける
ことができるはずです。A * 5 = (TimeSpan) 7 分 30 秒
Microsoft は、TimeSpan と整数の間の乗算を実装していません。
A / B = (int)4 または (double)4.5
この操作は .NET フレームワークに直接実装されていませんが、完全に理にかなっています。
A には 4.5 個の B があります (4.5 * 20 = 90)。
A % B = (TimeSpan) 10 Seconds
適切な TimeSpan 除算が与えられた場合、TimeSpan モジュラスは非常に単純なはずです。
A / Bは実際には (int)4残り(TimeSpan)10 秒に等しい。商と剰余は異なるデータ型です。これが、Microsoft がこれを直接実装していない理由かもしれません。
ループせずにこれを計算する効率的な方法を見つける必要があります。通常、私は短いループに反対しませんが、これらの TimeSpans は大きく異なる可能性があります。TimeSpans 間の指数関数的な差が大きいほど、商は大きくなります。商が大きいほど、「除算ループ」を実行する必要がある反復回数が多くなります。これは、アプリのこの部分では許可できない依存関係です。
SOには何かアイデアがありますか?
ruby - ルビーでは、なぜ「100.7」.to_f.modulo(1)= 0.700000000000003なのですか?
これは私には非常に奇妙です:
なぜ最後に3?
ここでも同じです...この値の余りを1で割っただけです。正確である必要があります。
javascript - JavaScript で最速の累乗剰余
私の問題は(g^x) mod p
、JavaScript ですばやく計算することです。^
指数mod
はモジュロ演算です。すべての入力は非負の整数で、x
約 256 ビットあり、p
2048 ビットの素数であり、g
最大 2048 ビットの場合があります。
JavaScript でこれを実行できるソフトウェアのほとんどは、JavaScript BigInt ライブラリ ( http://www.leemon.com/crypto/BigInt.html ) を使用しているようです。このライブラリでこのようなサイズの累乗を 1 回実行すると、遅いブラウザ (Firefox 3.0 と SpiderMonkey) で約 9 秒かかります。少なくとも 10 倍高速なソリューションを探しています。二乗と乗算 (二乗によるべき乗、http://en.wikipedia.org/wiki/Exponentiation_by_squaring ) を使用するという明白なアイデアは、2048 ビットの数値には遅すぎます: 最大 4096 の乗算が必要です。
ブラウザのアップグレードはオプションではありません。別のプログラミング言語を使用することはオプションではありません。番号を Web サービスに送信することはできません。
実装されているより高速な代替手段はありますか?
更新:以下の outis の回答に記載されている記事http://www.ccrwest.org/gordon/fast.pdfで推奨されているように、いくつかの追加の準備 (つまり、数百乗の事前計算) を行うことで、2048-最大で 354 のモジュラ乗算のみを使用するビット モジュラべき乗。(従来の平方乗算法は非常に遅く、最大 4096 の剰余乗算を使用します。) そうすることで、累乗剰余を Firefox 3.0 では 6 倍、Google Chrome では 4 倍高速化します。4096/354 の完全な高速化が得られない理由は、BigInt の累乗剰余アルゴリズムが、モンゴメリー削減 ( http://en.wikipedia.org/wiki/Montgomery_reduction )を使用するため、2 乗乗算よりも既に高速であるためです。 .
更新: BigInt のコードから始めて、手動で最適化された (およびインライン化された) カラツバ乗算 ( http://en.wikipedia.org/wiki/Karatsuba_algorithm ) の 2 つのレベルを実行する価値があるように思われ、その後でベース 32768 O( n^2) 乗算は BigInt で実装されます。これにより、2048 ビット整数の乗算が 2.25 倍高速化されます。残念ながらモジュロ演算は速くなりません。
更新: http://www.lirmm.fr/arith18/papers/hasenplaugh-FastModularReduction.pdf で定義されている修正された Barrett リダクションと、からつばの乗算と事前計算の累乗 ( http://www.ccrwest.org/gordon/で定義されている) を使用します。 fast.pdf )、Firefox 3.0 では、1 回の乗算に必要な時間を 73 秒から 12.3 秒に短縮できます。これは私ができる最善のようですが、それでも遅すぎます。
更新: Flash Player の ActionScript 2 (AS2) インタープリターは、Firefox 3.0 の JavaScript インタープリターよりも遅いように見えるため、使用する価値がありません: Flash Player 9 の場合は 4.2 倍遅く、Flash Player の場合は10、2.35倍遅いようです。数値計算における ActionScript2 と ActionScript3 (AS3) の速度の違いを知っている人はいますか?
更新: Flash Player 9 の ActionScript 3 (AS3) インタープリターは、JavaScript int Firefox 3.0 とほぼ同じ速度であるため、使用する価値はありません。
更新: Flash Player 10 の ActionScript 3 (AS3) インタープリターは、 の代わりに を使用し、int
の代わりに を使用すると、Firefox 3.0 の JavaScript インタープリターよりも最大 6.5 倍高速になります。少なくとも、2048 ビットの大きな整数の乗算では 2.41 倍高速でした。そのため、可能な場合は Flash Player 10 で実行して、AS3 でべき乗剰余を実行する価値があるかもしれません。これは、Google Chrome の JavaScript インタープリターである V8 よりもまだ遅いことに注意してください。さまざまなプログラミング言語と JavaScript の実装の速度比較については、http://ptspts.blogspot.com/2009/10/javascript-and-actionscript-performance.htmlを参照してください。Number
Vector.<int>
Array
Update: There is a very fast Java solution, which can be called from the browser's JavaScript if the Java plugin is installed. The following solution is about 310 times faster than the pure JavaScript implementation using BigInt.
Can anyone translate this code to Silverlight (C#)?
numbers - 分母がmと互いに素でない場合、「モジュラー乗法逆数」を計算する方法は?
(a/b) mod m
どこでa
とb
が非常に大きいかを計算する必要があります。
私がやろうとしているのは、 を計算する(a mod m) * (x mod m)
ことです。x
b
拡張ユークリッド アルゴリズムを使用してみましたが、b と m が互いに素でない場合はどうすればよいですか? b と m が互いに素である必要があることが特に言及されています。
コードhereを使用してみましたが、たとえば
3 * x mod 12
、 の値に対して はまったく不可能でありx
、存在しないことに気付きました!
私は何をすべきか?アルゴリズムを何らかの方法で変更できますか?
modulo - 最初の数値が小さい場合、剰余演算はどのように機能しますか?
私はPythonでモジュロ演算をいじっていますが、残りが何であるかを吐き出すことを理解しています。
しかし、最初の数値が 2 番目の数値よりも小さい場合はどうなるでしょうか。
例えば
2 % 5 答えは 2 です。
それはどのように機能しますか?
2/5 = .4
c# - .NET での long/large 数値とモジュラス
私は現在、それが有効なキーであることを確認するために数字でキーをスタンプする簡単なカスタム エンコーディング メソッドを書いています。
基本的に、エンコーディングから出てくる数字をキーで乗算していました。
次に、これらの数値を乗算して、キーを購入したユーザー/顧客に展開します。(Code % Key == 0) を使用してキーが有効であることを確認したかったのですが、値が大きい場合、mod 関数は期待どおりに機能していないようです。
番号 = 468721387; キー = 12345678; コード = 番号 * キー;
上記の数値を使用: Code % Key == 11418772
小さい数値の場合は正しく 0 を返します。.NET で long の割り切れる可能性を確認する信頼できる方法はありますか?
ありがとう!
編集:わかりました、私が特別で、何かが足りないかどうか教えてください...
と
私は何を間違っていますか?
c++ - (!(i % j)) は、i および j = 0 のモジュラスではないことを意味しますか?
このプログラム (私が作成したものではありません) は、1 は素数ではありませんが、1 を含む 1 から 25 までの素数を出力します。
この行に問題があります:if (!(i%j)) break;
これは「i と j = 0 のモジュラスではない」と言っていますか?
java - Javaで数値の偶数/奇数を分析する方法
(入力ボックスを使用して) 3 つの数字を読み取るプログラムを作成する必要があり、その値に応じて、次のいずれかのメッセージを書き込む必要があります。
- 3 つの数字すべてが奇数である OR
- 3 つの数字はすべて偶数または
- 2 つの数字が奇数で 1 つが偶数 OR
- 1 が奇数、2 が偶数
これは私がこれまでに持っているものです:
これは私が立ち往生しているところです。MOD を使用してメッセージを表示する方法がわかりません。IFステートメントも使用する必要があると思います...しかし、よくわかりません。
助けてください!:D