こんにちは17^1000
、Windows 7 の電卓で計算できますが、次のようになります。
1.2121254521552524e+123
(これは私には正しくないようです)
1.2121254521552524e+123 mod 18
どうすればそれをデルファイで書くことができますか。たとえば、 またはを使用したいです1.2121254521552524e+123 mod 100
。
もう一つの例:17 mod 5 = 2
誰でも私を助けることができますか?
ある種の拡張精度型を使用する必要があります。そのような型はプリミティブ型ではなく、既存の型を使用するか、独自の型を作成する必要があります (これは膨大な量の作業であり、車輪の再発明の典型的なケースです)。Java のシステム ライブラリには、必要な機能を処理する BigInteger クラスと BigDecimal クラスが含まれているため、これには Java の方が適切な言語である可能性があります。
編集: 大きな整数と高精度の浮動小数点演算を提供するいくつかの Delphi ライブラリがあります: http://www.delphiforfun.org/programs/Library/big_integers.htm
とはいえ、探しているものを達成するために Windows 電卓を使用することができず、これが 1 つまたは 2 つのことだけに必要な場合は、WolframAlpha などのより強力なオンライン サービスの使用を検討してください。
また、まだ回答がない場合は、次のようにします。
17^1000 mod 18 == 1
17^1000 mod 100 == 1
このような数値の計算に使用されるアルゴリズムは単純で、大きな整数のサポートは必要ありません。次の擬似コードを検討してください。
modular_exponentiation (base, exponent, modulus):
let value = 1
let c_exponent = 0
for c_exponent less than exponent:
let value = value * base
if value greater than or equal to modulus:
let value = (value) mod (modulus)
increment c_exponent
value.