topografoi.com

Συζητήσεις => Προγραμματισμός => αγρο-Πληροφορική και Τεχνολογία => python => Topic started by: chiossif on 27 Ιουλ 2010, 11:52

Title: Άσκηση: Πρώτοι αριθμοί
Post by: chiossif on 27 Ιουλ 2010, 11:52
Γεια και χαρά σε όλους.

Είναι ένα απ'τα πολλά αγαπημένα μου θέματα:

Να γραφτεί ένα πρόγραμμα σε python το οποίο να εμφανίζει όλους τους πρώτους αριθμούς που είναι μικρότεροι του Ν.

Ακολουθήστε τα ακόλουθα βήματα:

0. Μάθετε python (http://wiki.topografoi.com/doku.php/python) και τι είναι πρώτοι αριθμοί (http://el.wikipedia.org/wiki/%CE%A0%CF%81%CF%8E%CF%84%CE%BF%CF%82_%CE%B1%CF%81%CE%B9%CE%B8%CE%BC%CF%8C%CF%82). :-)

1. Όσοι διαβάσατε έως εδώ: σταματήστε να διαβάζετε και ορμήστε να το λύσετε. Χρησιμοποιείστε IDLE και πριν ανεβάσετε την λύση σας συγκρίνετε τα αποτελέσματά σας με τους πρώτους αριθμούς που θα βρείτε εδώ (http://en.wikipedia.org/wiki/List_of_prime_numbers#The_first_500_prime_numbers). Δοκιμάστε τιμές για το Ν όπως 2,3,4,5,11,12,-1,0 ή και όσες άλλες θέλετε. Υπάρχει κάποιος λόγος που τις διαλέξατε για έλεγχο; Στην απάντησή σας συμπεριλάβετε και τα προβλήματα ή σφάλματα που αντιμετωπίσατε.

2. Ιδού μια παραλλαγή της άσκησης: "Να γραφτεί ένα πρόγραμμα σε python το οποίο να εμφανίζει όλους τους Ν πρώτους αριθμούς". Λύστε την.

3. Ξανά διάβασμα: δείτε την προτινόμενη λύση μου (http://dl.dropbox.com/u/1145459/Code/%CE%A0%CF%81%CF%8E%CF%84%CE%BF%CE%B9%20%CE%91%CF%81%CE%B9%CE%B8%CE%BC%CE%BF%CE%AF.py) στην αρχική εκφώνηση. Μελετήστε την προσεκτικά. Την καταλάβατε; Μπορείτε να την βελτιώσετε συντακτικά ή/και αλγοριθμικά; (Συντακτική βελτίωση είναι η βελτίωση στο γράψιμο του προγράμματος ενώ αλγοριθμική στον αλγόριθμο τον οποίο υλοποιεί με σκοπό είτε την αύξηση της ταχύτητας εκτέλεσης είτε την οικονομία μνήμης είτε οτιδήποτε... :-) )

Αφού φτάσατε έως εδώ απλά συντάξτε ως συνάρτηση τον καλύτερο αλγόριθμο που εντοπίσατε και μοιραστείτε τον μαζί μας (πάντα σε gplv3 :-) )

Καλή διασκέδαση :-)
Title: Απ: Άσκηση: Πρώτοι αριθμοί
Post by: vagvaf on 29 Ιουλ 2010, 17:15
Η δικιά μου λύση για το πρώτο μέρος είναι αυτή (http://dl.dropbox.com/u/2746721/primes.py).

Εκτελεση:

Αοίγμα με IDLE -> Run -> Run Module και γράφουμε primeslt(n), όπου n ο αριθμός που επιθυμούμε.

Title: Απ: Άσκηση: Πρώτοι αριθμοί
Post by: chiossif on 30 Ιουλ 2010, 10:30
@vagvaf: Μπράβο...

...συνέχισε με το 2ο βήμα.

@rest: Οι λοιποί ΜΗΝ συνεχίζετε την ανάγνωση... θα μαρτυρηθούν μυστικά :-)

Καλό κώδικα.
Title: Απ: Άσκηση: Πρώτοι αριθμοί
Post by: vagvaf on 01 Αυγ 2010, 13:06
Ανέπτυξα λίγο την ιδέα του chiossif

Η ιδέα είναι η ίδια, απλά είναι γραμμένο με 3 συναρτήσεις. Το module δουλεύει ως εξής:

Η τρίτη συνάρτηση lprod(l) απλά υπολογίζει το γινόμενο όλων των στοιχείων μιας λίστας.
Η δεύτερη συνάρτηση isprime(x) υπολογίζει αν ένας αριθμός είναι πρώτος ή όχι. Για να το κάνει αυτό καλέι την lprod(l).
Η πρώτη συνάρτηση primes(n) καλεί την δεύτερη και υπολογίζει όλους τους πρώτους αριθμούς που είναι μικρότεροι του n.

Επίσης, σε αυτή την μορφή το πρόγραμμα είναι πιο python-like και δίνεται η δυνατότητα να μελετηθεί ο τρόπος που μια συνάρτηση χρησιμοποιεί άλλες συναρτήσεις για να κάνει τη δουλειά της. Με αυτόν τον τρόπο (το σπάσιμο δλδ του προγράμματος σε μικρές συναρτήσεις) κάποιος μπορει να χρησιμοποιήσει της επί μέρους συναρτήσεις για άλλους σκοπούς.


EDIT: ο κωδικας βγήκε επειδή βρέθηκε κάποιο πολυ σοβαρό bug