NO 07 [C#] 第10001個孤獨的小孩兒

來源:互聯網
上載者:User

原題:

By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.

What is the 10001st prime number?

 

翻譯:

列出前6個素數分別是:2,3,5,7,11,和13,我們發現第6個素數是13。

那麼第 10001 個素數是多少?

思路:

 

代碼

 1 /*  
 2  * 解題思路:  
 3  * 基本上我還是把每一個Prime Number都存入了列表,最後當列表長度=10001的時候,我列印最後一個。  
 4  * 但是基於這個思路必須解決兩個問題:  
 5  *  1、方便的尋找備選數用來判定。  
 6  *  2、快速的判斷備選數是否為素數。  
 7  *   
 8  * 關於尋找:  
 9  *  尋找使用的技巧來源於我使用了一個數學公式的定律:即任何一個素數都可以寫成 4*N+1 或 4*N+3 的形式 N 屬於 0和正整數。  
10  * 這樣我只要,依次疊加迭帶變數i從0開始即可,迅速找出一批備選數。  
11  *   
12  * 關於判斷:  
13  *  判斷的技巧來源於素數本身和素數的集合:集合眾包含了所有的素數,如果新擷取的備選數能被現有素數任意一個整除(即模為0),  
14  * 則該備選數不是素數。根據公式可得也不存在偶數的情況,所有備選數均為奇數。  
15  */  

 

代碼:

代碼

 1 using System;   
 2 using System.Collections.Generic;   
 3   
 4 class The10001stPrimeNumber   
 5 {   
 6     internal static int Find10001stPrimeNumber()   
 7     {   
 8         List<int> al = new List<int>(10001);   
 9   
10         int tmp;   
11         int i = 1;   
12   
13         al.Add(2); // 積極式載入的一些素數   
14         al.Add(3);   
15   
16         while (al.Count < 10001) // 當正好找到10001個時放棄計算。   
17         {   
18             tmp = 4 * i + 1;   
19             if (CanAddList(al, tmp))   
20             {   
21                 al.Add(tmp);   
22             }   
23   
24             tmp = 4 * i + 3;   
25             if (CanAddList(al, tmp))   
26             {   
27                 al.Add(tmp);   
28             }   
29   
30             i++;   
31         }   
32   
33         return al[10000];   
34     }   
35   
36     // 判斷是否是素數。   
37     static bool CanAddList(System.Collections.Generic.List<int> al, int num)   
38     {   
39         bool flag = true;   
40   
41         foreach (int k in al)   
42         {   
43             if (num % k == 0)   
44             {   
45                 flag = false;   
46                 break;   
47             }   
48         }   
49   
50         return flag;   
51     }   
52 }

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.