Δημοσιεύτηκε: 03 Ιούλ 2012, 12:30
Μεταφράζοντας την λύση που είχα ποστάρει πολύ παλιότερα από python σε C:
Edit:
Αυτό που έγραψες είναι αλγοριθμικά σωστό.
Όμως ο αλγόριθμος που έγραψες για να βρεις αν ένας αριθμός είναι πρώτος, είναι εξαιρετικά αργός για μεγάλα νούμερα εξαιτίας του loop που χρησιμοποιείς, γι' αυτό και θα κάνει πάρα μα πάρα πολύ ώρα μέχρι να τελειώσει η εκτέλεση του προγράμματος σου. Έτσι δεν βλέπεις ποτέ την έξοδο.
Αυτό που πόσταρα παραπάνω δίνει την λύση σε λιγότερο από δευτερόλεπτο.
Edit2:
Έκανα μια μικρή αλλαγή στον κώδικα και το πρόγραμμα έγινε ακόμα πιο γρήγορο.
- Μορφοποιημένος Κώδικας: Επιλογή όλων
-
#include <stdio.h>
#include <stdbool.h>
int main(void) {
long long number = 600851475143, i = 2;
for (;;) {
bool divisible = false;
for (; i < number; i++)
if (!(number % i)) {
number = number / i;
divisible = true;
break;
}
if (!divisible) // number is prime
break;
}
printf("%lld\n", number);
return 0;
}
Edit:
Αυτό που έγραψες είναι αλγοριθμικά σωστό.
Όμως ο αλγόριθμος που έγραψες για να βρεις αν ένας αριθμός είναι πρώτος, είναι εξαιρετικά αργός για μεγάλα νούμερα εξαιτίας του loop που χρησιμοποιείς, γι' αυτό και θα κάνει πάρα μα πάρα πολύ ώρα μέχρι να τελειώσει η εκτέλεση του προγράμματος σου. Έτσι δεν βλέπεις ποτέ την έξοδο.
Αυτό που πόσταρα παραπάνω δίνει την λύση σε λιγότερο από δευτερόλεπτο.
Edit2:
Έκανα μια μικρή αλλαγή στον κώδικα και το πρόγραμμα έγινε ακόμα πιο γρήγορο.