Ο κώδικας του Άκη πιστεύω πολύ πιο ευανάγνωστος.
Η μόνη αλλαγή που χρειάζεται για να δουλέψει και για αρνητικούς είναι η παρακάτω:
ΠΡΟΓΡΑΜΜΑ protos
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: αλλο, χ, χ0, ι
ΑΡΧΗ
Διαβασε χ
Αν χ > 2 τότε
χ0 <-- χ - 1
ΓΙΑ ι ΑΠΟ 2 ΜΕΧΡΙ χ0
ΑΝ χ MOD ι = 0 ΤΟΤΕ
αλλο <-- 1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΝ αλλο <> 1 τότε
ΓΡΑΨΕ 'ειναι πρωτος'
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'δεν ειναι πρωτος'
ΤΕΛΟΣ_ΑΝ
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'δεν είναι πρώτος'
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ protos
Και μία πιο γρήγορη λύση:
Ο αριθμός που θα δοθεί από τον χρήστη θα είναι πρώτος αν δεν διαιρείται με κανένα αριθμό, πέρα του 1 και του εαυτού του. Για να δούμε, όμως, αν διαιρείται με κάποιον αριθμό, δε χρειάζεται να ψάξουμε όλους του αριθμούς, αλλά μόνο αυτούς που είναι μικρότεροι οι ίσοι της τετραγωνικής ρίζας του. Έτσι, γίνονται Ν - ΤΡ(Ν) λιγότερες επαναλήψεις. Για παράδειγμα, αν το νούμερο που θέλουμε να εξετάσουμε είναι το 10.000 τότε αντί για 9.998 επαναλήψεις που θα κάναμε, κάνουμε μόλις 100 επαναλήψεις!
Το πρόβλημά μου εδώ είναι ότι η τετραγωνική ρίζα της γλωσσομάθειας επιστρέφει δεκαδικό αριθμό (και φυσικά έτσι πρέπει). Δεν ξέρω αν υπάρχει κάποιος τρόπος να μεταρτέψεις έναν πραγματικό αριθμό σε ακέραιο στη γλωσσομάθεια (π.χ κάποιο cast, ή κάποιο τέχνασμα).