激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - 使用C# 判斷給定大數是否為質數的詳解

使用C# 判斷給定大數是否為質數的詳解

2020-11-29 14:07C#教程網 C/C++

本篇文章是對使用C#判斷給定大數是否為質數的方法進行了詳細的分析介紹,需要的朋友參考下

C#判斷給定大數是否為質數,目標以快速度得到正確的計算結果。
在看到這道題的時候,第一反應這是一道考程序復雜度的題,其次再是算法問題。
我們先來看看質數的規則:
Link:http://en.wikipedia.org/wiki/Prime_number
C#求質數代碼:

復制代碼 代碼如下:


public bool primeNumber(int n){
             int sqr = Convert.ToInt32(Math.Sqrt(n));
             for (int i = sqr; i > 2; i--){
                 if (n % i == 0){
                     b = false;
                 }
             }
             return b;
         }


顯然以上代碼的程序復雜度為N
我們來優化下代碼,再來看下面代碼:

復制代碼 代碼如下:


public bool primeNumber(int n)
         {
             bool b = true;
             if (n == 1 || n == 2)
                 b = true;
             else
             {
                 int sqr = Convert.ToInt32(Math.Sqrt(n));
                 for (int i = sqr; i > 2; i--)
                 {
                     if (n % i == 0)
                     {
                         b = false;
                     }
                 }
             }
             return b;
         }


通過增加初步判斷使程序復雜度降為N/2。
以上兩段代碼判斷大數是否質數的正確率是100%,但是對于題干
  1.滿足大數判斷;
  2.要求以最快速度得到正確結果;

顯然是不滿足的。上網查了下最快算法得到準確結果,公認的一個解決方案是Miller-Rabin算法
Link:http://en.wikipedia.org/wiki/Miller%E2%80%93Rabin_primality_test
Miller-Rabin 基本原理是通過隨機數算法判斷的方式提高速度(即概率擊中),但是犧牲的是準確率。
Miller-Rabin 對輸入大數的質數判斷的結果并不一定是完全準確的,但是對于本題來說算是一個基本的解題辦法了。
Miller-Rabin C# 代碼:

復制代碼 代碼如下:


public bool IsProbablePrime(BigInteger source) {
             int certainty = 2;
             if (source == 2 || source == 3)
                 return true;
             if (source < 2 || source % 2 == 0)
                 return false;

             BigInteger d = source - 1;
             int s = 0;

             while (d % 2 == 0) {
                 d /= 2;
                 s += 1;
             }

             RandomNumberGenerator rng = RandomNumberGenerator.Create();
             byte[] bytes = new byte[source.ToByteArray().LongLength];
             BigInteger a;

             for (int i = 0; i < certainty; i++) {
                 do {
                     rng.GetBytes(bytes);
                     a = new BigInteger(bytes);
                 }
                 while (a < 2 || a >= source - 2);

                 BigInteger x = BigInteger.ModPow(a, d, source);
                 if (x == 1 || x == source - 1)
                     continue;

                 for (int r = 1; r < s; r++) {
                     x = BigInteger.ModPow(x, 2, source);
                     if (x == 1)
                         return false;
                     if (x == source - 1)
                         break;
                 }

                 if (x != source - 1)
                     return false;
             }

             return true;
         }

延伸 · 閱讀

精彩推薦
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
主站蜘蛛池模板: 中文字幕一区二区三区久久 | 国产在线观看91精品 | 在线亚洲综合 | 欧美成人免费小视频 | 激情视频导航 | 午夜激情视频网站 | 午夜视频中文字幕 | 色人阁在线视频 | 免费黄色一级网站 | 91av在线免费观看 | 91久久国产露脸精品免费 | 欧美黄色大片免费观看 | 免费a级毛片永久免费 | 国产日产精品久久久久快鸭 | 精品视频一区二区三区四区 | 亚洲第一成人在线视频 | 国产美女视频一区二区三区 | 久国产精品 | 国产一级毛片高清视频完整版 | 337p日本欧洲亚洲大胆精蜜臀 | 国产一区视频免费观看 | 日韩在线视频导航 | 免费观看9x视频网站在线观看 | 爱操在线 | 免费在线观看成人av | 一区二区国产在线 | av在线播放电影 | 亚洲第一激情网 | 免费观看一级 | 成人做爰高潮片免费视频韩国 | 国产小视频一区 | 麻豆视频在线观看免费网站 | 在线a免费观看 | va视频在线 | 91av网址| 91午夜少妇三级全黄 | 99re久久最新地址获取 | 亚洲一区二区免费视频 | 免费观看在线 | 蜜桃91麻豆| 亚洲国产高清一区 |