這是我的代碼,用於查找10000th素數,但它非常慢,需要7秒來計算。查找10000th素數
#include <stdio.h>
#include <stdlib.h>
long int prime (int n)
{
int i;
for(i=2;i<n;i++)
{
if(n%i==0)
return 0;
}
return 1;
}
int main()
{
int i=2,counter=0;
while(1)
{
if(prime(i))
counter++;
if(counter==10000)
break;
i++;
}
printf("10000th prime number is: %d",i);
}
這是蠻力的方法,所以這可能是它很慢的原因。 我認爲問題可能是它必須多次調用函數。所以你認爲可以優化什麼?或者最好找到一些這方面的數學公式。
http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes – Barmar 2014-11-06 23:09:33
你'黃金()'函數從2到'n'運行,但實際上你只需要檢查2到'sqrt(n)' – 2014-11-06 23:09:39
你也只需要測試奇數。 – Barmar 2014-11-06 23:10:22