a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C# > 正文

C# 4.0 大數的運算--BigInteger的應用詳解

2020-01-24 03:21:07
字體:
來源:轉載
供稿:網友
前段時間,有個同事說

“30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000001”
是個質數。
直覺告訴我,光是在中間加幾個0,在后面加個1,估計不是質數。
有很多面試題,都會要面試者去做一些關于大數的運算,例如在這里就有判斷上面這個數是不是質數的情況。

很明顯,Integer ,Long都是不能來處理如此巨大的數的。
在.net framework 4.0中,System.Numerics.dll 中提供了BigInteger 類。使用這個類可以很方便的解決這個問題。
判斷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;
    }
}

可惜的是BigInteger 不支持Sqrt方法,所以換用

for (BigInteger bi = 3; BigInteger.Pow(bi, 2) <= bigInteger; bi += 2)

 結果如下圖:

image

可以知道”30000000000000000000000000…………………………..1”不是質數,可以被13除盡。

2:C語言中有道經典的題目是求100!后面有幾個0.

如果你不知道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 

還有很多使用大數的運算的地方,都等待著你的發揮!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 日韩免费在线观看视频 | 91免费看| 国产高清精品一区二区三区 | 在线视频a | 国产激情在线 | 亚洲色图在线观看 | 春色av | 日韩一区欧美 | 91黄在线观看| 国产91精品一区二区麻豆网站 | 欧美日韩国产精品 | 91偷拍精品一区二区三区 | 国产精品视频 | 99精品久久久久久久免费 | 可以免费看的av | 九九热在线免费视频 | 中文字幕 欧美 日韩 | 国产精品入口免费视频一 | 国产一级二级毛片 | 国产日韩一区二区 | 国产精品无码久久久久 | 亚洲高清视频在线观看 | 国产乱a视频在线 | 日韩免费在线 | 国产精品九九九 | 国产乱视频网站 | 毛片免费看 | 在线视频成人 | 国产区视频 | 成人午夜免费视频 | 日韩久久一区二区三区 | 黄色一级在线观看 | 欧美一区二区视频免费观看 | 欧美高清一区 | 国产欧美综合一区 | 欧美男人天堂网 | 久久99深爱久久99精品 | 91性高湖久久久久久久久_久久99 | 黄色毛片在线观看 | 亚洲一区二区三区免费在线观看 | 欧美精品免费在线观看 |