この小さなプログラムをより速くする簡単な方法はありますか?私は割り当てのためにそれを作った、そしてそれは正しいが、遅すぎる。プログラムの目的は、nの2つの素数のペアを印刷することです。この非常に小さな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
どれくらい早く取得する必要がありますか?あなたのアルゴリズムのbig-Oを減らす必要がありますか、または一定のfacorで十分ですか? –