有沒有簡單的方法可以使這個小程序更快?我已經完成了作業,這是正確的,但太慢了。該程序的目的是打印第n對素數,其中兩個素數之差爲2,給定n。如何讓這個非常小的C程序更快?
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
bool isPrime(int number) {
for (int i = 3; i <= number/2; i += 2) {
if (!(number%i)) {
return 0;
}
}
return 1;
}
int findNumber(int n) {
int prevPrime, currentNumber = 3;
for (int i = 0; i < n; i++) {
do {
prevPrime = currentNumber;
do {
currentNumber+=2;
} while (!isPrime(currentNumber));
} while (!(currentNumber - 2 == prevPrime));
}
return currentNumber;
}
int main(int argc, char *argv[]) {
int numberin, numberout;
scanf ("%d", &numberin);
numberout = findNumber(numberin);
printf("%d %d\n", numberout - 2, numberout);
return 0;
}
我認爲使用某種數組或列表將包含發現,直到目前號碼的所有素數,並通過這個列表,而不是所有的數字除以每個號碼的,但我們還沒有真正涵蓋了這些不同的數據結構但我覺得我應該可以解決這個問題。我只是從C開始,但我在Python和Java方面有一些經驗。
'!(A == B)' - >'A!= B'更容易閱讀 – bolov
您的約束是什麼?你可以使用預先計算的素數對數組嗎?一系列加速素數測試的首要素數? – purplepsycho
它需要多快得到?你是否需要減少算法的大O,或者是否足夠好? –