0

こんにちは17^1000、Windows 7 の電卓で計算できますが、次のようになります。

1.2121254521552524e+123(これは私には正しくないようです)

1.2121254521552524e+123 mod 18 どうすればそれをデルファイで書くことができますか。たとえば、 またはを使用したいです1.2121254521552524e+123 mod 100

もう一つの例:17 mod 5 = 2

誰でも私を助けることができますか?

4

1 に答える 1

3

ある種の拡張精度型を使用する必要があります。そのような型はプリミティブ型ではなく、既存の型を使用するか、独自の型を作成する必要があります (これは膨大な量の作業であり、車輪の再発明の典型的なケースです)。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.
于 2012-06-20T17:32:41.683 に答える