亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

C#算法設計與分析-尋找素數

2019-11-18 19:42:32
字體:
來源:轉載
供稿:網友

    在這篇文章中,我將使用C#編制兩個尋找素數的算法,說明算法設計的重要性以及算法的分析。

       素數尋找問題由來已久,一直是一些數學家追求的目的。關于素數的定義及性質,我就不在這里多敘了,相信大家都對此了如指掌。素數的尋找思路比較的簡單,根據素數的性質(素數應該不能被除了1和它自身的其他數整除)我們可以從最小的素數2開始,一直到比它小1的數為止,用這些數去整除它,如果它能被整除則它必定不是素數,這是判斷單個素數的方法(這個算法思想最簡單,時間復雜度最大)。對于尋找比某一個給定的整數值小的所有素數也可以采用這種方法,不過我們會發現,采用這種單個判斷的方法所耗的時間比較多。比如查找不大于10的素數,我們必須從2開始一個個判斷,共需判斷9個數,事實上按照我們后面講述的方法,只需循環2次就可以了。因此,下面的兩種方法都將基于刪除法來做。

       我們來看看刪除法的思想:

1.  將小于給定整數值n的所有正整數加到一個數組中;

2.  刪除能夠被一些整數整除的數;

3.  數組中遺留的元素就是最后要得到的素數序列。

對于第二步,我們將給出兩種方法來實現。我們先來看看算法:

算法一:

class PRime

     {

         public static int[] PrimeList;

         public  static void FindPrime(int n)

         {

              int[] IntList;

              IntList=new int[n];             

              for (int p=2;p<=n;p++) IntList[p-1]=p;

              for (int p=2;p<Math.Sqrt(n);p++)

              {

                   int j=p+1;

                   while (j<=n)

                   {

                       if ((IntList[j-1]!=0 ) && ((IntList[j-1]% p)==0) ) IntList[j-1]=0;

                       j=j+1;

                   }

              }

              int i=0;

              for (int p=2;p<=n;p++)

              {

                   if (IntList[p-1]!=0) i=i+1;

              }

              PrimeList=new int[i];

              i=0;

              for (int p=2;p<=n;p++)

              {

                   if (IntList[p-1]!=0)

                   {

                       PrimeList[i]=IntList[p-1];

                       i=i+1;

                   }                 

              }

         }

     }
 

 

這這個算法中,刪除的數是那些被從2開始直到n的平方根的整數整除的數。這個算法比起前面介紹的單個素數的尋找方法要好,它的循環次數減少了一多半,但是這個算法還不是最理想的:

 

1.              例如,6既能被2整除,也能被3整除,那么當p=2時,6被刪掉了一次;當p=3時,6又被刪除了一次,雖然按照我們設定的算法規則,這不會導致沖突(通過判斷IntList數組元素是否為0,若為0就不必重復刪除),但是這會使得算法的效率低下。

 

2.              還有計算素數序列元素個數時,我們也走了彎路。第一步,我們先計算出了數組元素大小,第二步才開始賦值,事實上這兩步我們可以減去計算數組大小這一步,可以把它放在前面完成。

 

3.              已經被刪除了的元素,也就是那些不是素數的元素,可以不用拿他們去整除整數,例如4不用拿去整除8,因為能被4整除的數肯定能被2整除,已經在前面循環中被刪除了。

 

基于上述考慮,我們得到了一個效率更加高的算法:

 

class primegood

     {

         public static int[] PrimeList;

         public static void FindPrime(int n)

         {

              int[] IntList;

              int len=n-1;

              IntList=new int[n];

              for (int p=2;p<=n;p++) IntList[p-1]=p;

              for (int p=2;p<Math.Sqrt(n);p++)

              {

                   if (IntList[p-1]==0) continue;

                   int j=p*p;

                   while (j<=n)

                   {

                       if (IntList[j-1]!=0 )

                       {

                            IntList[j-1]=0;

                            len=len-1;

                       }

                       j=j+p;

                   }

              }

              PrimeList=new int[len];

              int i=0;

              for (int p=2;p<=n;p++)

              {

                   if (IntList[p-1]!=0)

                   {

                       PrimeList[i]=IntList[p-1];

                       i=i+1;

                   }                 

              }

         }

     }
 

 

這個算法思想和前面的算法完全一樣,不過改正了上面算法中不完善的一些內容。

 

為了說明這兩個算法的效率區別,我們編制了如下的主程序來比較一下他們的差異:

 

static void   Main()

         {

              Console.WriteLine("Start!");

              DateTime mytime5=DateTime.Now;

              primegood.FindPrime(100000);

              /*for (int i=0;i<=primegood.PrimeList.Length-1;i++)

              {

                   Console.WriteLine(primegood.PrimeList[i]);

              }*/

              DateTime mytime6=DateTime.Now;

              TimeSpan timeadd3=mytime6-mytime5;

              Console.WriteLine(timeadd3.Ticks);

              DateTime mytime1=DateTime.Now;

              prime.FindPrime(100000);

              DateTime mytime2=DateTime.Now;

              TimeSpan timeadd=mytime2-mytime1;

              DateTime mytime3=DateTime.Now;

              primegood.FindPrime(100000);

              DateTime mytime4=DateTime.Now;

              TimeSpan timeadd2=mytime4-mytime3;

              Console.WriteLine(timeadd.Ticks);

              Console.WriteLine(timeadd2.Ticks);

         }

     }
 

 

通過運行這個程序,可以發現他們的差別是如此的大(前面的算法所耗時間幾乎是后面算法的30-60倍),參見下圖:


      

    事實上,這兩個算法的時間復雜度近似為:⊙(n1.5);⊙(n);可見,對于同一個問題有著多種不同復雜性的算法實現,算法設計是一門十分重要的學問。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产啪精品视频| 久久国产精品久久国产精品| 国产精品视频99| 91高潮精品免费porn| 亚洲日本aⅴ片在线观看香蕉| 免费99精品国产自在在线| 日韩免费视频在线观看| 欧美电影在线观看高清| 国产91av在线| 2018国产精品视频| 国产精品久久激情| 成人av在线天堂| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲天堂男人天堂| 国产成人精彩在线视频九色| 亚洲黄色av网站| 亚洲电影中文字幕| 国内精品久久久| 亚洲欧美日韩另类| 岛国精品视频在线播放| 91精品久久久久久久久久久久久久| 成人精品一区二区三区电影免费| 亚洲女人天堂视频| 国产成人中文字幕| 欧美黑人又粗大| 亚洲精品成人久久久| 欧美精品在线观看91| 福利视频第一区| 热草久综合在线| 国产一区二区三区免费视频| 欧美丝袜美女中出在线| 亚洲激情视频在线播放| 久久亚洲精品一区| 久久综合免费视频影院| 国产激情视频一区| 亚洲国产高潮在线观看| 中文字幕一区二区三区电影| 97视频在线免费观看| 国产精品夜间视频香蕉| 91视频免费在线| 国产福利精品视频| 色综合久久精品亚洲国产| 欧美黄网免费在线观看| 久久亚洲影音av资源网| 丝袜美腿精品国产二区| 欧美丰满老妇厨房牲生活| 日韩国产激情在线| 久久夜色精品国产亚洲aⅴ| 久热精品视频在线| 日韩欧美在线字幕| 国外成人在线视频| 91日本在线观看| www.99久久热国产日韩欧美.com| zzjj国产精品一区二区| 欧美性猛交xxxx| 日韩视频亚洲视频| 国产有码在线一区二区视频| 中文字幕亚洲情99在线| 亚洲久久久久久久久久久| 日韩欧美精品中文字幕| 亚洲精品www| 俺去亚洲欧洲欧美日韩| 国产成人极品视频| 欧美日韩久久久久| 欧美激情视频一区| 综合久久五月天| 亚洲成人亚洲激情| 精品爽片免费看久久| 亚洲一区二区中文字幕| 国产精品久久999| 亚洲天堂影视av| 亚洲精品一区二区三区婷婷月| 欧美男插女视频| 亚洲精品国产精品乱码不99按摩| www.欧美精品一二三区| 91九色单男在线观看| 亚洲男子天堂网| 91嫩草在线视频| 亚洲美女在线视频| 国产成人av网| 亚洲成av人乱码色午夜| 九九视频这里只有精品| 久久午夜a级毛片| 亚洲精品综合精品自拍| 亚洲欧美国产日韩天堂区| 国产精品久久久久久久久免费| 91精品久久久久久久久久久| 美女性感视频久久久| 国产精品丝袜久久久久久不卡| 成人观看高清在线观看免费| 最近2019中文字幕大全第二页| 欧美第一黄色网| 国产欧美日韩精品专区| 亚洲成人久久久| 日韩欧美国产激情| 91精品国产自产在线| 久久中文久久字幕| 午夜精品理论片| 亚洲人成电影网站色| 久久久久北条麻妃免费看| 国产成人精品综合| 国产一区在线播放| 日韩在线视频二区| 亚洲精品国产成人| 久久青草福利网站| 2018国产精品视频| 在线亚洲欧美视频| 亚洲色图35p| 亚洲天堂开心观看| 久久天堂av综合合色| 亚洲免费高清视频| 欧美精品videosex牲欧美| 欧美裸体xxxx极品少妇| 97视频在线观看视频免费视频| 久久久久中文字幕| 欧美激情一区二区三区久久久| 色偷偷9999www| 亚洲国产97在线精品一区| 亚洲精品美女在线观看| 成人激情综合网| 亚洲视频在线视频| 国产精品成人久久久久| 国产精品1234| 国产精品情侣自拍| 成人免费网站在线看| 国产精品一区二区久久| 国产精品影院在线观看| 91av在线免费观看| 亚洲欧美999| 亚洲国产三级网| 精品国产一区二区三区久久久狼| 九色成人免费视频| 久久久久久久成人| 精品中文字幕在线| 成人中文字幕在线观看| 俺去亚洲欧洲欧美日韩| 色伦专区97中文字幕| 欧美国产高跟鞋裸体秀xxxhd| 亚洲欧美一区二区精品久久久| 国产精品成人久久久久| 日韩高清电影免费观看完整版| 欧美午夜影院在线视频| 国产精品久久国产精品99gif| 午夜精品久久久久久99热软件| 国产精品视频精品| 456国产精品| 精品视频偷偷看在线观看| 中日韩美女免费视频网站在线观看| 日韩在线观看网站| 成人久久一区二区| 久久成人精品视频| 欧美亚洲激情在线| 精品亚洲一区二区| 国产91色在线|免| 在线亚洲男人天堂| 色偷偷av一区二区三区| 国产精品第七影院| 亚洲国产婷婷香蕉久久久久久| 日韩精品视频免费专区在线播放| www.亚洲免费视频| 精品一区二区三区四区在线| 亚洲精品www久久久久久广东| 黑人巨大精品欧美一区二区一视频| 日韩中文字幕国产精品|