自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C#計算素數序列淺談

開發(fā) 后端
這里介紹C#計算素數序列,素數尋找問題由來已久,一直是一些數學家追求的目的。關于素數的定義及性質,我就不在這里多敘了,相信大家都對此了如指掌。

學習C#語言時,經常會遇到C#計算素數序列問題,這里將介紹C#計算素數序列問題的解決方法。

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

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

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

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

3.數組中遺留的元素就是***C#計算素數序列。

  1. class prime  
  2. {  
  3. public static int[] PrimeList;  
  4. publicstatic void FindPrime(int n)  
  5. {  
  6. int[] IntList;  
  7. IntList=new int[n];  
  8. for (int p=2;p<=n;p++) IntList[p-1]=p;  
  9. for (int p=2;p<Math.Sqrt(n);p++)  
  10. {  
  11. int j=p+1;  
  12. while (j<=n)  
  13. {  
  14. if ((IntList[j-1]!=0 ) && ((IntList[j-1]% p)==0) ) IntList[j-1]=0;  
  15. jj=j+1;  
  16. }  
  17. }  
  18. int i=0;  
  19. for (int p=2;p<=n;p++)  
  20. {  
  21. if (IntList[p-1]!=0) ii=i+1;  
  22. }  
  23. PrimeList=new int[i];  
  24. i=0;  
  25. for (int p=2;p<=n;p++)  
  26. {  
  27. if (IntList[p-1]!=0)  
  28. {  
  29. PrimeList[i]=IntList[p-1];  
  30. ii=i+1;  
  31. }  
  32. }  
  33. }  

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

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

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

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

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

  1. class primegood  
  2. {  
  3. public static int[] PrimeList;  
  4. public static void FindPrime(int n)  
  5. {  
  6. int[] IntList;  
  7. int len=n-1;  
  8. IntList=new int[n];  
  9. for (int p=2;p<=n;p++) IntList[p-1]=p;  
  10. for (int p=2;p<Math.Sqrt(n);p++)  
  11. {  
  12. if (IntList[p-1]==0) continue;  
  13. int j=p*p;  
  14. while (j<=n)  
  15. {  
  16. if (IntList[j-1]!=0 )  
  17. {  
  18. IntList[j-1]=0;  
  19. lenlen=len-1;  
  20. }  
  21. jj=j+p;  
  22. }  
  23. }  
  24. PrimeList=new int[len];  
  25. int i=0;  
  26. for (int p=2;p<=n;p++)  
  27. {  
  28. if (IntList[p-1]!=0)  
  29. {  
  30. PrimeList[i]=IntList[p-1];  
  31. ii=i+1;  
  32. }  
  33. }  
  34. }  

【編輯推薦】

  1. 運用C#數據提供者
  2. C#允許運算符重載剖析
  3. Java和C#頂層聲明概述
  4. C#完全限定名簡單分析
  5. C#數據類型簡單介紹
責任編輯:佚名 來源: 博客園
相關推薦

2009-08-20 18:30:33

C# ReaderWr

2011-09-21 10:56:31

C#結構

2009-08-07 11:26:53

C#數組結構

2009-08-12 11:24:25

C# String對象

2009-08-19 17:12:18

C# Connecti

2009-08-31 09:37:09

C# Employee

2009-08-25 16:16:43

C# oledbcon

2009-08-26 15:46:01

C#匿名類型

2009-08-06 15:30:23

C#類型系統(tǒng)

2009-08-14 17:58:05

C#接口方法

2009-08-26 13:15:38

C#選擇控制

2009-09-02 15:41:21

C# HTTPWebR

2009-08-20 10:24:52

C#開發(fā)WinForm

2009-08-10 10:04:25

C#抽象類C#接口

2009-08-10 14:55:04

C#定義Nullabl

2009-08-18 17:08:50

C#編寫XML文檔

2009-08-25 13:26:49

C#編寫asp+

2009-08-27 14:44:11

C# interfac

2009-09-04 11:00:13

通過C#引用傳遞

2009-08-19 17:45:26

C#使用GDI+
點贊
收藏

51CTO技術棧公眾號