Project Euler 7

本文章來自我的個人網站,如感興趣,歡迎訪問我的個人網站:http://www.qingshuimonk.com/


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?

今天一口氣搞定了PE的三道題,其實還是不算太難的。
要求找到第10001個質數,有了之前做第三題的經驗,這道題要輕車熟路得許多。
主要思想是,每產生一個質數,記在一個數組裏,之後的數(只有奇數)用之前的質數去除,若能被整除則表明不是質數,若之前質數除完都不能整除,則表明這個數是質數。
算法:

void main()
{
    int PrimeNum[10000], TotalPrime,j, n;
    PrimeNum[0] = 2;
    TotalPrime = 0;
    for(n = 3; ; n = n+2)
    {
        for(j = 0; j < = TotalPrime; j++)
        {
            if(n%PrimeNum[j] == 0)break;                    //不是質數
            if(j == TotalPrime)
            {
                TotalPrime++;
                PrimeNum[TotalPrime] = n;
            }
        }
        if(TotalPrime == 10000)break;
    }
}

這樣當產生到第10001個(數組裏是10000個)的時候輸出就可以了。整個程序用時0.80s.
應該有更簡單的方法的,不過今天實在太忙,沒功夫管了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章