ΠΡΟΓΡΑΜΜΑ Εικασία_του_Γκόλνμπαχ ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: n ΑΡΧΗ ΚΑΛΕΣΕ input(n) ΚΑΛΕΣΕ solve(n) ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ ΔΙΑΔΙΚΑΣΙΑ input(n) ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: n ΑΡΧΗ ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ ΔΙΑΒΑΣΕ n ΜΕΧΡΙΣ_ΟΤΟΥ n > 2 ΚΑΙ n mod 2 = 0 ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ ΔΙΑΔΙΚΑΣΙΑ solve(n) ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: n, a[1000], j ΑΡΧΗ ! Με αποδοτικότερη υλοποίηση του Κόσκινου, επιτυγχάνεται γραμμική αυμπτωτική συμπεριφορά ΚΑΛΕΣΕ Sieve_of_Eratosthenes(n, a, j) ! O(nloglogn) ΚΑΛΕΣΕ Two_Pointers(a, 2, j, n) ! O(n) ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ ΔΙΑΔΙΚΑΣΙΑ Sieve_of_Eratosthenes(n, a, j) ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: a[1000], i, j, n ΛΟΓΙΚΕΣ: isprime[1000] ΑΡΧΗ ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ n isprime[i] <- ΑΛΗΘΗΣ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ Τ_Ρ(n) ΑΝ isprime[i] ΤΟΤΕ ΓΙΑ j ΑΠΟ i^2 ΜΕΧΡΙ n ΜΕ_ΒΗΜΑ i isprime[j] <- ΨΕΥΔΗΣ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ j <- 0 ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ n ΑΝ isprime[i] ΤΟΤΕ j <- j + 1 a[j] <- i ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ ΔΙΑΔΙΚΑΣΙΑ Two_Pointers(a, i, j, n) ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: a[1000], i, j, n ΑΡΧΗ ΟΣΟ i <= j ΕΠΑΝΑΛΑΒΕ ΑΝ a[i] + a[j] = n ΤΟΤΕ ΚΑΛΕΣΕ output(a[i], a[j]) i <- i + 1 j <- j - 1 ΑΛΛΙΩΣ_ΑΝ a[i] + a[j] < n ΤΟΤΕ i <- i + 1 ΑΛΛΙΩΣ j <- j - 1 ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ ΔΙΑΔΙΚΑΣΙΑ output(a, b) ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: a, b ΑΡΧΗ ΓΡΑΨΕ a, " + ", b ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ