C‖4.0の大きな数の演算--Big Integerの応用詳細


この間、ある同僚が言いました。「300000 0000 0000 0000 0000 0000 0000 0000 0000 0000 000000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 00000000000 0000 0000 0000 000001"は素数です。直感的に教えてくれました。光は中間にいくつかの0を加えて、後に1を加えて、素数ではないと推定されます。多くの面接問題がありますが、面接者は大きな数の演算をします。例えばここでは上の数が素数かどうかを判断する場合があります。明らかに、Integer、Longはすべてこのような巨大な数を処理しにくることができないのです。frame ebook 4.0では、System.Numerics.dllでBig Integerクラスを提供しています。このクラスを使うとこの問題を簡単に解決できます。nは素数を判断する方法である。1:偶数であれば素数ではない。2:Sqrt(n)以下の数で割り切れるなら、素数ではない。コードは以下の通りです。

private static bool IsPrime()
{
    string largeNumber = @"30000000000000000000000...000000001”;
    BigInteger bigInteger = BigInteger.Parse(largeNumber);
    if (bigInteger.IsEven)
    {
        return false;
    }
    for (BigInteger bi = 3; BigInteger.Pow(bi, 2) <= bigInteger; bi += 2)
    {
        if (bigInteger % bi == 0)
        {
            return false;
        }
    }
    return true;
}
の本来のforサイクルのコードは

for (BigInteger bi = 3; bi <= BigInteger.Sqrt(bigInteger); bi += 2)
{
    if (bigInteger % bi == 0)
    {
        return false;
    }
}
であるべきです。
残念なことに、Big IntegerはSqrt方法に対応していませんので、交換します。
for(Big Integer bi=3;Big Integer.Pow(bi,2)<=big Integer;bi+=2)
 結果は下図のようです
image
「300000000000………………1」は素数ではなく、13で割り切れることができます。
2:C言語には経典のテーマがあります。100を求めます。後ろに何個ありますか
BigIntegerを知らなかったら、どうすればいいですか?
 100ですimageと理解できます。
 偶数は5より多いので、iの値はjより多いです。だから100を求めます。どれぐらいの0がありますか?jを求める値と考えられます。
もちろん公式も使えます。
 Sum=[100/5]+[100/(5^2)]+[100/(5^3)]=20+4+0=24
 もしあなたは考えも公式もないなら、頭の中に一つの考えしかないです。1*2*3*4*5*.100のfor循環、そして0の数を統計すれば、4.0の中でも実現できます。スピードが遅いようですが、答えはまだ得られます。
 コードは以下の通りです
image 
統計のコードは以下の通りです。
運転結果は以下の通りです。

int count = 0;
for (int i = strSum.Length - 1; i >= 0; i--)
{
    if (strSum[i] == '0')
    {
        count++;
    }
    else
    {
        break;
    }
}
image。 
大きな数の演算を使うところがたくさんあります。あなたの発揮を待っています。