Gibt es eine einfache Möglichkeit, dieses kleine Programm schneller zu machen? Ich habe es für eine Aufgabe gemacht, und es ist korrekt, aber zu langsam. Das Ziel des Programms ist es, das n-te Paar Primzahlen zu drucken, wobei der Unterschied zwischen den beiden zwei ist, wobei n gegeben ist.Wie kann ich dieses sehr kleine C-Programm schneller machen?
#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;
}
ich als eine Art von Array oder eine Liste verwenden, die alle Primzahlen bis die aktuelle Nummer gefunden und teilen jede Nummer durch diese Liste anstelle aller Zahlen enthalten würde, aber wir haben nicht wirklich diese unterschiedlichen Datenstrukturen bedeckt Trotzdem denke ich, dass ich in der Lage sein sollte, dieses Problem ohne zu lösen. Ich fange gerade mit C an, aber ich habe etwas Erfahrung in Python und in Java.
'! (A == B)' -> 'A! = B' leichter zu lesen – bolov
Was sind Ihre Einschränkungen? Können Sie ein Array von Primzahlpaaren vorberechnen? Eine Reihe der ersten Primzahlen, um den Primärtest zu beschleunigen? – purplepsycho
Wie viel schneller muss es bekommen? Müssen Sie das große O Ihres Algorithmus reduzieren oder ist ein konstanter Faktor gut genug? –