1. 程式人生 > >尤拉計劃問題七matlab實現

尤拉計劃問題七matlab實現

Problem 7 :

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?

思路 :

我們首先列舉出一些有用的條件:

  • 1不是素數。
  • 素數中除了2是偶數以外,其他的素數都是奇數。
  • 任何一個數字 \large n 只能有一個大於\large \sqrt{n} 的素因子。
  • 對任意的數 \large n 進行素性測試的結果是:如果我們找不到小於或等於\large n 的數整除 \large n
     ,則\large n為素數:\large n 的唯一素因子是 \large n 本身。

好的,以上的條件讓我們對求解素數有了一個理性的認識,那麼接下來直接上程式碼。

程式碼 :

clc;clear all;close all
tic                      %Measurement program run time 
i = 1;
n = 2;
while i<10001
    n = n+1;
    x = 3;
    if mod(n,2) == 0
        n = n + 1;
    end
    while x <= sqrt(n)
        if mod(n,x) == 0
            break
        end       
        x = x + 2;
    end    
    if x > sqrt(n)
        i = i + 1;
    end
end
toc
fprintf('The answer is %.0d\n',n)

結果 :104743

小結 :

程式碼中用了一個測試程式執行時間的函式:

\large tic

程式碼塊

\large toc

這個組合很經典,而且用法也比較簡單。

還有在matlab中註釋儘量用英語,matlab對中文的相容性不好,下次開啟程式時可能中文顯示亂碼。本來英語就不好,好要英文註釋,不可能!

                                                            

開始的時候我一直是用中文進行註釋,然而下次開啟的時候看註釋就是這個樣子----------------%????????,

what?這是個啥嘛?辛辛苦苦打上去的註釋呢?你快回來,我一人承受不來。

                                                  

面對這個問題,我也頗為不快,那能怎麼辦,那就去改變,嘗試過。但是問題還是得不到解決\large \cdot \cdot \cdot \cdot \cdot \cdot好吧!既然改變不了外界環境,那我只能改變自我了!其實這跟英文水平沒多大關係,要自信,相信我,沒錯的!因為你只要自己看的懂就行,順便練習一下英文嘍,一舉兩得,何樂而不為呢!希望大家多多交流,與君共勉!