Επισκέπτης Δημοσ. 14 Φεβρουαρίου 2019 Δημοσ. 14 Φεβρουαρίου 2019 (επεξεργασμένο) Έστω πρόγραμμα σε γλώσσα C που διαβάζει έναν ακέραιο αριθμό και τον αναλύει σε γινόμενο πρώτων παραγόντων. --Τι θα ήταν καλύτερο από τα παρακάτω.; 1) Να περιέχει έναν αλγόριθμο που θα βρίσκει τους πρώτους αριθμούς και με βάση αυτούς να γίνεται η ανάλυση.; 2) Να περιέχει μια λίστα πρώτων αριθμών και με βάση αυτούς να γίνεται η ανάλυση.; --Μέχρι ποιον πρώτο αριθμό πρέπει να ψάξει ο αλγόριθμος, ή πόσο μεγάλη πρέπει να είναι η λίστα.; Επεξ/σία 14 Φεβρουαρίου 2019 από Επισκέπτης
Lanike71 Δημοσ. 15 Φεβρουαρίου 2019 Δημοσ. 15 Φεβρουαρίου 2019 Να φτιάξει λίστα; Τι λίστα; Πού θα σταματάει; 1
imitheos Δημοσ. 15 Φεβρουαρίου 2019 Δημοσ. 15 Φεβρουαρίου 2019 2 ώρες πριν, Lanike71 είπε Να φτιάξει λίστα; Τι λίστα; Πού θα σταματάει; Άκυρο. Δεν μου αρέσει σαν πράξη αλλά έσβησα την απάντησή μου. Αν και μου φάνηκε για άσκηση είπα ας γράψω δυο λόγια. Την ώρα που έγραφα και έβλεπα το quote του, το ύφος της άσκησης και το username κάτι μου θύμισε. Δύο παραδείγματα παρακάτω. Βάζει τέτοιου είδους ερωτήσεις και μετά φέρεται άσχημα σε αυτούς που του απαντάνε και σβήνει τα μηνύματά του. 3
Επισκέπτης Δημοσ. 15 Φεβρουαρίου 2019 Δημοσ. 15 Φεβρουαρίου 2019 3 ώρες πριν, Lanike71 είπε Να φτιάξει λίστα; Τι λίστα; Πού θα σταματάει; Την ίδια απορία έχουμε 😁
albNik Δημοσ. 15 Φεβρουαρίου 2019 Δημοσ. 15 Φεβρουαρίου 2019 8 λεπτά πριν, tony_dim_2018 είπε Την ίδια απορία έχουμε 😁 Η λίστα δεν χρειάζεται να έχει πρώτους μεγαλύτερους από τη ρίζα του N. Π.χ για αριθμούς <=100 η λίστα σου είναι πρώτοι <=10 δλδ [2,3,5,7]
Lanike71 Δημοσ. 15 Φεβρουαρίου 2019 Δημοσ. 15 Φεβρουαρίου 2019 @imitheos Μου κάνει εντύπωση η μνήμη σου φίλε! @tony_dim_2018 H άσκηση είναι κλασική. Ρίξε μία ματιά στο google. Επίσης δεν έχω απορία για τη λίστα. Η ερώτηση ήταν ρητορική, μήπως και σε βοηθήσω να βγάλεις τη λύση.
Επισκέπτης Δημοσ. 15 Φεβρουαρίου 2019 Δημοσ. 15 Φεβρουαρίου 2019 (επεξεργασμένο) 8 ώρες πριν, albNik είπε Η λίστα δεν χρειάζεται να έχει πρώτους μεγαλύτερους από τη ρίζα του N. Π.χ για αριθμούς <=100 η λίστα σου είναι πρώτοι <=10 δλδ [2,3,5,7] Σ' ευχαριστώ! 8 ώρες πριν, Lanike71 είπε @imitheos Μου κάνει εντύπωση η μνήμη σου φίλε! @tony_dim_2018 H άσκηση είναι κλασική. Ρίξε μία ματιά στο google. Επίσης δεν έχω απορία για τη λίστα. Η ερώτηση ήταν ρητορική, μήπως και σε βοηθήσω να βγάλεις τη λύση. Σ' ευχαριστώ! Περί μνήμης (βλέπε spoiler) κι ευχαριστίες στο τέλος του project από τον κακότροπο Τόνυ Spoiler Στις 2/6/2018 στις 1:59 ΠΜ, tony_dim_2018 είπε Από εκείνη την ημέρα, και με αφορμή αυτό το σχόλιο, άλλο δεν κάνω απ' το να εστιάζω την προσοχή μου σε «κάτι», που τελικά δεν είναι η δημιουργία ενός project, αλλά μόνο ο αρχικός στόχος, δηλαδή, η απόκτηση εμπειρίας και γνώσης στο αντικείμενο προγραμματισμός, εξασκώντας απλώς το χόμπι μου. Αποφάσισα γι αυτό ν' αλλάξω πορεία, και με αφορμή κάποιες ερωτήσεις που βλέπω κατά καιρούς «εδώ» στο forum, του τύπου «από που να ξεκινήσω - που να ψάξω», κλπ, να δημιουργήσω ένα άλλο που θα δίνει κάποιες ιδέες - λύσεις, και ταυτόχρονα γιατί όχι, να είναι αυτό το πρώτο μου. Πρόκειται για μια μικρή βιβλιοθήκη. https://trinket.io/html/46e9acdebf?runMode=autorun Επεξ/σία 15 Φεβρουαρίου 2019 από Επισκέπτης
White_Cat Δημοσ. 17 Φεβρουαρίου 2019 Δημοσ. 17 Φεβρουαρίου 2019 Καλησπέρα ! Μόλις τώρα είδα το μήνυμα κι επειδή μου φάνηκε κι εμένα κλασική άσκηση, είπα ν’ απαντήσω. Το προγραμματάκι που έφτιαξα κάνει ακριβώς αυτό, δηλαδή δέχεται έναν θετικό ακέραιο και τον αναλύει σε γινόμενο πρώτων αριθμών. Μόνο που έχω γράψει Αγγλικά στα μηνύματα που βγάζει στην οθόνη, γιατί υπάρχει οδηγία απ’ τους διαχειριστές του site ν’ αποφεύγονται τα greeklish. Όπως βλέπετε είναι γραμμένο σε κλασική παλιά C (όχι C++) και χωρίζεται σε δύο υπορουτίνες. Την υπορουτίνα prime και φυσικά τη βασική ρουτίνα, τον κορμό του, που ονομάζεται πάντα main στη C. Όπως φαίνεται κι απ’ τον ορισμό της ρουτίνας prime, αυτή απλά δέχεται έναν θετικό ακέραιο αριθμό ως όρισμα και ελέγχει αν είναι πρώτος. Δηλαδή αν δεν βρεθούν διαιρέτες του αριθμού που δόθηκε επιστρέφει την τιμή 1, αλλιώς επιστρέφει 0. Διάλεξα αυτό τον τρόπο σκέψης γιατί στη C, εν αντιθέσει με άλλες νεώτερες γλώσσες, δεν υπάρχει ο τύπος Boolean και συνήθως οι προγραμματιστές τον υποκαθιστούν με ακέραιες μεταβλητές που λαμβάνουν την τιμή 1 ή 0 στη θέση των τιμών true/false. Η ρουτίνα main ξεκινάει ζητώντας από το χρήστη να δώσει τον αριθμό που θα πρέπει ν’ αναλυθεί σε γινόμενο πρώτων παραγόντων. Ο τύπος μεταβλητής που διάλεξα για ν’ αποθηκεύσω αυτόν τον αριθμό είναι ο long int ώστε να υπάρχει μεγάλο εύρος τιμών. Αφού ελέγξουμε αν ο αριθμός που δόθηκε είναι πράγματι θετικός ακέραιος, τότε ξεκινάει η πραγματική δουλειά. Κατ’ αρχήν είναι σκόπιμο να γίνει έλεγχος αν ο αριθμός που δόθηκε είναι πράγματι πρώτος, οπότε η ανάλυση σταματά εκεί. Δηλαδή αν ο χρήστης δώσει τον αριθμό 11, δεν έχει κανένα νόημα να προσπαθήσουμε να τον αναλύσουμε σε γινόμενο πρώτων παραγόντων. Αν βρισκόμαστε στη συνήθη περίπτωση, όπου ο δεδομένος αριθμός προς ανάλυση δεν είναι πρώτος, τότε ακολουθείται η γνωστή απ’ το γυμνάσιο διαδικασία. Ο αρχικός αριθμός δηλαδή διαιρείται διαδοχικά με διάφορους πρώτους αριθμούς και αν η διαίρεση δίνει υπόλοιπο ίσο με μηδέν, τότε αυτοί οι αριθμοί είναι οι ζητούμενοι παράγοντες και τυπώνονται στην οθόνη. #include <stdio.h> int prime(int n) { int x=0; for(x=2;x<n;x++) if(n%x==0) return 0; return 1; } int main() { long int n=0,x=0; printf("Please enter an integer number. Decimal digits are ignored ");scanf("%ld",&n); printf("\n\n"); if(n<=0) { printf("Invalid data.\n");return 0;} if(prime(n)) printf("%ld is already a prime number",n); else { for(x=2;x<=n;x++) if(prime(x)) while(n%x==0) { if(n>=1) {n=n/x; printf("%ld\n",x);} } } return 0; } Να είστε όλοι καλά, Ο Άσπρος Γάτος
imitheos Δημοσ. 17 Φεβρουαρίου 2019 Δημοσ. 17 Φεβρουαρίου 2019 Θέλουμε να αγιάσουμε (να μην απαντήσουμε) και δεν μας αφήνεις Αν το πρόγραμμα τρέχει μία φορά και υπολογίζει μία φορά μόνο έναν αριθμό, τότε ίσως να μην αξίζει να ορίσεις μια λίστα. Εναλλακτικά μπορείς να έχεις μια μικρή λίστα με τους πρώτους 20-25 πρώτους αριθμούς. Αν το πρόγραμμα τρέχει για ώρα και υπολογίζει ένα σετ αριθμών, δεν σε συμφέρει να κάνεις 15 φορές την ίδια δουλειά οπότε μια λίστα αρχίζει να έχει νόημα. Για παράδειγμα μπορεί σε κάθε αριθμό που πάει να υπολογίσει να συμπληρώνει την λίστα μέχρι τον μεγαλύτερο παράγοντα οπότε αν ο επόμενος αριθμός είναι μεγαλύτερος θα συμπληρώσει από εκεί και πέρα. Όλα εξαρτώνται από το τι θέλεις να κάνει το πρόγραμμά σου και τι φραγμούς σου βάζει το hardware. Μπορεί μια λίστα με Ν στοιχεία να μειώσει δραματικά τον χρόνο εκτέλεσης αλλά εσύ να μπορείς να δεσμεύσεις μνήμη μόνο για Χ < Ν στοιχεία. Ένα πράγμα που μπορείς να κάνεις, είναι να βελτιστοποιήσεις τον αλγόριθμό σου όσο αυτό γίνεται. Για παράδειγμα ας δούμε τον αλγόριθμο που έδωσε ο λευκός γάτος. Πολύς κόσμος στην συνάρτηση prime κάνει ένα μεγάλο λάθος το οποίο ο γάτος δεν έκανε. Ορίζει μια μεταβλητή counter και μετά παίρνει σβάρνα αριθμούς με ένα for και κάθε φορά που βρίσκει ένα διαιρέτη, αυξάνει τον μετρητή. Μετά το τέλος του for ελέγχει τον μετρητή και αν αυτός έχει τιμή > 1 τότε σου λέει δεν είναι πρώτος. Αυτό όμως έχει τεράστια άσκοπη αργοπορία. Εμάς δεν μας νοιάζει _πόσους_ διαιρέτες έχει αλλά _αν_ έχει οπότε μια πολύ καλύτερη εκδοχή είναι αυτή που έδωσε ο γάτος. Ξεκινά το βρόχο και στον πρώτο διαιρέτη που βρίσκει επιστρέφει 0 και δρόμο. Έτσι, αν δώσεις τον αριθμό 80, αντί να ψάξει από το 2 μέχρι το 80, θα ψάξει μόλις μέχρι το 2. Ξεχνώντας κόσκινα του ερατοσθένη και λοιπούς καλούς αλγορίθμους, αυτός ο απλοϊκός αλγόριθμος με το % υπόλοιπο, μπορεί να βελτιωθεί ακόμη περισσότερο. Γιατί να έχεις "for(x=2;x<n;x++)" και να αυξάνεις το x κατά 1; Αν ο αριθμός διαιρείται με το 4 θα διαιρείται και με το 2 οπότε θα είχες ήδη επιστρέψει 0. Επίσης δεν χρειάζεται να έχεις συνθήκη x<n γιατί γνωρίζουμε ότι δεν χρειάζεται να ελέγξουμε αριθμούς μεγαλύτερους από ρίζα n (ή έστω n/2 αν οι συναρτήσεις της μαθηματικής βιβλιοθήκης είναι πάρα πολύ αργές ή δεν υπάρχουν στο hw σου). int isprime(int n) { int i; /* 2,3,5,7 are primes */ if ((n == 2) || (n == 3) || (n == 5) || (n == 7)) return 1; /* all even numbers except 2 are not primes */ if ((n % 2) == 0) return 0; for (i = 3; i < n / 2; i += 2) { if ((n % i) == 0) return 0; } return 1; } Μια βελτιωμένη εκδοχή λοιπόν είναι η παραπάνω. Αν είναι ζυγός κατευθείαν δρόμο και μετά ξεκινάς από το 3 και αυξάνεις κατά 2 για να ελέγχεις μόνο μονούς. Φυσικά μπορείς να κάνεις τροποποιήσεις ώστε να σώζεις τα αποτελέσματα σε λίστα αλλά το κόσκινο του ερατοσθένη είναι τόσο γρήγορο που δεν ξέρω κατά πόσο η μέθοδος με λίστα θα είναι πιο γρήγορη. Στο επόμενο κομμάτι ο γάτος "for(x=2;x<=n;x++) if(prime(x)) while(n%x==0) { if(n>=1) {n=n/x; printf("%ld\n",x);}" οπότε παίρνει σβάρνα αριθμούς από το 2 και πάνω και _αν_ είναι πρώτοι, τότε βλέπει αν είναι διαιρέτες. Γιατί όμως να τρέξουμε όλη την χρονοβόρα διαδικασία για να δούμε αν είναι πρώτος μόνο και μόνο για να πάει άχρηστη μετά στην περίπτωση που δεν είναι διαιρέρτης; Μπορούμε να αντιστρέψουμε τα βήματα και να ελέγχουμε πρώτα αν είναι διαιρέτης και μόνο τότε να βλέπουμε αν είναι πρώτος. Και πάει λέγοντας. Το project euler έχει πάρα πολλές τέτοιες ασκήσεις οι οποίες αν πας να τις λύσεις με τον απλοϊκό brute force τρόπο θα χρειαστείς 4 χρόνια και σε βάζει στο τριπάκι να σκεφτείς μαθηματικές συνθήκες για να απλοποιήσεις το μέγεθος του προβλήματος. Για παράδειγμα στο δικό μου μηχάνημα το πρόβλημα 5 χρειάζεται 8 δευτερόλεπτα παίρνοντας σβάρνα αριθμούς και 0.2 δευτερόλεπτα με μια μικρή αλλαγή. Το πρόβλημα 10 θέλει 3 λεπτά και 28 δευτερόλεπτα με την παραπάνω isprime και μόλις 0.4 δευτερόλεπτα με το κόσκινο του ερατοσθένη. 2
albNik Δημοσ. 17 Φεβρουαρίου 2019 Δημοσ. 17 Φεβρουαρίου 2019 Δοκιμάζουμε μεχρι τετραγωνική ρίζα του Ν (όχι Ν/2). Ας πουμε οτι Ν=88 και οι πρωτοι p*p<=88 ειναι [2,3,5,7]. Δοκιμαζουμε με 2 και εχουμε 88/2/2/2 =11 για το 11 ελέγχουμε μονο διαιρεση με 3 (οχι 5 και 7 διότι 5*5>11)... αρα 11 ειναι πρωτος. Δηλαδη για το 88 ελέγξαμε μονο διαίρεση με 2 και 3.
imitheos Δημοσ. 17 Φεβρουαρίου 2019 Δημοσ. 17 Φεβρουαρίου 2019 33 λεπτά πριν, albNik είπε Δοκιμάζουμε μεχρι τετραγωνική ρίζα του Ν (όχι Ν/2). Ας πουμε οτι Ν=88 και οι πρωτοι p*p<=88 ειναι [2,3,5,7]. Δοκιμαζουμε με 2 και εχουμε 88/2/2/2 =11 για το 11 ελέγχουμε μονο διαιρεση με 3 (οχι 5 και 7 διότι 5*5>11)... αρα 11 ειναι πρωτος. Δηλαδη για το 88 ελέγξαμε μονο διαίρεση με 2 και 3. Ναι ρίζα Ν έγραψα στο κείμενο απλά στον κώδικα έβαλα n/2 από βαρεμάρα για να μην κάνω link με την -lm Το n / 2 το ανέφερα στην παρένθεση εγκυκλοπαιδικά. Ήταν πριν χρόνια και δεν θυμάμαι στον κώδικα ποιου project το είχα δει αλλά η εξήγηση που είχαν δώσει ήταν αυτό που έγραψα στην παρένθεση. Ο compiler για εκείνη την πλατφόρμα ήταν freestanding και δεν είχε sqrt; ήταν πάρα πολύ αργή; δεν θυμάμαι ακριβώς. Για Ν > 4, το Ν/2 είναι μεγαλύτερο του sqrt(N) οπότε ήταν "safe" βελτιστοποίηση για αυτούς.
albNik Δημοσ. 17 Φεβρουαρίου 2019 Δημοσ. 17 Φεβρουαρίου 2019 Μπορείς να γράψεις i*i<=N αντί για i<=sqrt(N) 😎 1
k33theod Δημοσ. 18 Φεβρουαρίου 2019 Δημοσ. 18 Φεβρουαρίου 2019 Και ακόμα καλύτερα να μην αυξάνουμε τους μονούς κατά 2 δηλαδή 3,5,7,9 αλλά να εξετάζουμε μόνο τους prime το 9 δηλαδή δεν χρειάζεται να το δούμε μετά το 7 πάμε σε next prime που είναι το 11 Σε μεγάλους αριθμούς παίζει ρόλο, οι μονοί αριθμοί πχ μέχρι το 1.000.000 είναι το μισό δηλαδή 500.000 ενώ οι primes 78.498 γλιτώνουμε δηλαδή 421.502 πράξεις
Επισκέπτης Δημοσ. 18 Φεβρουαρίου 2019 Δημοσ. 18 Φεβρουαρίου 2019 (επεξεργασμένο) 4 ώρες πριν, k33theod είπε Και ακόμα καλύτερα να μην αυξάνουμε τους μονούς κατά 2 δηλαδή 3,5,7,9 αλλά να εξετάζουμε μόνο τους prime το 9 δηλαδή δεν χρειάζεται να το δούμε μετά το 7 πάμε σε next prime που είναι το 11 Σε μεγάλους αριθμούς παίζει ρόλο, οι μονοί αριθμοί πχ μέχρι το 1.000.000 είναι το μισό δηλαδή 500.000 ενώ οι primes 78.498 γλιτώνουμε δηλαδή 421.502 πράξεις Κάπως έτσι... 😀 ................................................ Στη δική μου λύση θεώρησα ότι το πρόγραμμα δεν χρειάζεται να ψάξει για πρώτους αριθμούς αφού τους έχω γραμμένους (μαζί με μερικούς άλλους παρεμπιπτόντως). Έτσι τους δήλωσα «καρφωτά» και κάνω έλεγχο μόνο με αυτούς. Αν το πρόγραμμα σταματήσει σε μεγάλο αριθμό, τότε, είτε θα είναι πρώτος, είτε θα είναι αποτέλεσμα μιας δύναμης εκτός λίστας. Παραθέτω ολόκληρο τον κώδικα στο spoiler Spoiler /* 5o_Program_A_mod_N_x1 Ανάλυση σε γινόμενο πρώτων παραγόντων */ #include <stdio.h> main() { //.................................. system("chcp 1253>nul"); // Ελληνικά //.................................. printf(" \n"); printf(" Ανάλυση σε γινόμενο πρώτων παραγόντων \n"); printf(" Χρησιμοποιεί τους πρώτους αριθμούς p, από τον p1 = 2 έως τον p37 = 157 \n"); printf(" \n"); int a, i; int x1; int p1 = 2; int p2 = 3; int p3 = 5; int p4 = 7; int p5 = 11; int p6 = 13; int p7 = 17; int p8 = 19; int p9 = 23; int p10 = 29; // ... int p11 = 31; int p12 = 37; int p13 = 41; int p14 = 43; int p15 = 47; int p16 = 53; int p17 = 59; int p18 = 61; int p19 = 67; int p20 = 71; // ... int p21 = 73; int p22 = 79; int p23 = 83; int p24 = 89; int p25 = 97; int p26 = 101; int p27 = 103; int p28 = 107; int p29 = 109; int p30 = 113; // ... int p31 = 127; int p32 = 131; int p33 = 137; int p34 = 139; int p35 = 149; int p36 = 151; int p37 = 157; do { printf(" Δώστε έναν ακέραιο αριθμό και enter \n"); scanf("%d", &a); //............................................. //_____________________________________________ for (i=0; i<=40; i++) { if (a%p1 == 0) { x1 = a / p1; printf("%d : %d = %d ", a, p1, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p2 == 0) { x1 = a / p2; printf("%d : %d = %d ", a, p2, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p3 == 0) { x1 = a / p3; printf("%d : %d = %d ", a, p3, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p4 == 0) { x1 = a / p4; printf("%d : %d = %d ", a, p4, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p5 == 0) { x1 = a / p5; printf("%d : %d = %d ", a, p5, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p6 == 0) { x1 = a / p6; printf("%d : %d = %d ", a, p6, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p7 == 0) { x1 = a / p7; printf("%d : %d = %d ", a, p7, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p8 == 0) { x1 = a / p8; printf("%d : %d = %d ", a, p8, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p9 == 0) { x1 = a / p9; printf("%d : %d = %d ", a, p9, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p10 == 0) { x1 = a / p10; printf("%d : %d = %d ", a, p10, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p11 == 0) { x1 = a / p11; printf("%d : %d = %d ", a, p11, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p12 == 0) { x1 = a / p12; printf("%d : %d = %d ", a, p12, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p13 == 0) { x1 = a / p13; printf("%d : %d = %d ", a, p13, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p14 == 0) { x1 = a / p14; printf("%d : %d = %d ", a, p14, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p15 == 0) { x1 = a / p15; printf("%d : %d = %d ", a, p15, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p16 == 0) { x1 = a / p16; printf("%d : %d = %d ", a, p16, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p17 == 0) { x1 = a / p17; printf("%d : %d = %d ", a, p17, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p18 == 0) { x1 = a / p18; printf("%d : %d = %d ", a, p18, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p19 == 0) { x1 = a / p19; printf("%d : %d = %d ", a, p19, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p20 == 0) { x1 = a / p20; printf("%d : %d = %d ", a, p20, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p21 == 0) { x1 = a / p21; printf("%d : %d = %d ", a, p21, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p22 == 0) { x1 = a / p22; printf("%d : %d = %d ", a, p22, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p23 == 0) { x1 = a / p23; printf("%d : %d = %d ", a, p23, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p24 == 0) { x1 = a / p24; printf("%d : %d = %d ", a, p24, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p25 == 0) { x1 = a / p25; printf("%d : %d = %d ", a, p25, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p26 == 0) { x1 = a / p26; printf("%d : %d = %d ", a, p26, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p27 == 0) { x1 = a / p27; printf("%d : %d = %d ", a, p27, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p28 == 0) { x1 = a / p28; printf("%d : %d = %d ", a, p28, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p29 == 0) { x1 = a / p29; printf("%d : %d = %d ", a, p29, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p30 == 0) { x1 = a / p30; printf("%d : %d = %d ", a, p30, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p31 == 0) { x1 = a / p31; printf("%d : %d = %d ", a, p31, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p32 == 0) { x1 = a / p32; printf("%d : %d = %d ", a, p32, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p33 == 0) { x1 = a / p33; printf("%d : %d = %d ", a, p33, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p34 == 0) { x1 = a / p34; printf("%d : %d = %d ", a, p34, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p35 == 0) { x1 = a / p35; printf("%d : %d = %d ", a, p35, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p36 == 0) { x1 = a / p36; printf("%d : %d = %d ", a, p36, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p37 == 0) { x1 = a / p37; printf("%d : %d = %d ", a, p37, x1); printf("\n"); a = x1; } } }while(1); } Επεξ/σία 18 Φεβρουαρίου 2019 από Επισκέπτης
albNik Δημοσ. 18 Φεβρουαρίου 2019 Δημοσ. 18 Φεβρουαρίου 2019 7 ώρες πριν, tony_dim_2018 είπε Παραθέτω ολόκληρο τον κώδικα στο spoiler Εμφάνιση κρυμμένου περιεχομένου /* 5o_Program_A_mod_N_x1 Ανάλυση σε γινόμενο πρώτων παραγόντων */ #include <stdio.h> main() { //.................................. system("chcp 1253>nul"); // Ελληνικά //.................................. printf(" \n"); printf(" Ανάλυση σε γινόμενο πρώτων παραγόντων \n"); printf(" Χρησιμοποιεί τους πρώτους αριθμούς p, από τον p1 = 2 έως τον p37 = 157 \n"); printf(" \n"); int a, i; int x1; int p1 = 2; int p2 = 3; int p3 = 5; int p4 = 7; int p5 = 11; int p6 = 13; int p7 = 17; int p8 = 19; int p9 = 23; int p10 = 29; // ... int p11 = 31; int p12 = 37; int p13 = 41; int p14 = 43; int p15 = 47; int p16 = 53; int p17 = 59; int p18 = 61; int p19 = 67; int p20 = 71; // ... int p21 = 73; int p22 = 79; int p23 = 83; int p24 = 89; int p25 = 97; int p26 = 101; int p27 = 103; int p28 = 107; int p29 = 109; int p30 = 113; // ... int p31 = 127; int p32 = 131; int p33 = 137; int p34 = 139; int p35 = 149; int p36 = 151; int p37 = 157; do { printf(" Δώστε έναν ακέραιο αριθμό και enter \n"); scanf("%d", &a); //............................................. //_____________________________________________ for (i=0; i<=40; i++) { if (a%p1 == 0) { x1 = a / p1; printf("%d : %d = %d ", a, p1, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p2 == 0) { x1 = a / p2; printf("%d : %d = %d ", a, p2, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p3 == 0) { x1 = a / p3; printf("%d : %d = %d ", a, p3, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p4 == 0) { x1 = a / p4; printf("%d : %d = %d ", a, p4, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p5 == 0) { x1 = a / p5; printf("%d : %d = %d ", a, p5, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p6 == 0) { x1 = a / p6; printf("%d : %d = %d ", a, p6, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p7 == 0) { x1 = a / p7; printf("%d : %d = %d ", a, p7, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p8 == 0) { x1 = a / p8; printf("%d : %d = %d ", a, p8, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p9 == 0) { x1 = a / p9; printf("%d : %d = %d ", a, p9, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p10 == 0) { x1 = a / p10; printf("%d : %d = %d ", a, p10, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p11 == 0) { x1 = a / p11; printf("%d : %d = %d ", a, p11, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p12 == 0) { x1 = a / p12; printf("%d : %d = %d ", a, p12, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p13 == 0) { x1 = a / p13; printf("%d : %d = %d ", a, p13, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p14 == 0) { x1 = a / p14; printf("%d : %d = %d ", a, p14, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p15 == 0) { x1 = a / p15; printf("%d : %d = %d ", a, p15, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p16 == 0) { x1 = a / p16; printf("%d : %d = %d ", a, p16, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p17 == 0) { x1 = a / p17; printf("%d : %d = %d ", a, p17, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p18 == 0) { x1 = a / p18; printf("%d : %d = %d ", a, p18, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p19 == 0) { x1 = a / p19; printf("%d : %d = %d ", a, p19, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p20 == 0) { x1 = a / p20; printf("%d : %d = %d ", a, p20, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p21 == 0) { x1 = a / p21; printf("%d : %d = %d ", a, p21, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p22 == 0) { x1 = a / p22; printf("%d : %d = %d ", a, p22, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p23 == 0) { x1 = a / p23; printf("%d : %d = %d ", a, p23, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p24 == 0) { x1 = a / p24; printf("%d : %d = %d ", a, p24, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p25 == 0) { x1 = a / p25; printf("%d : %d = %d ", a, p25, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p26 == 0) { x1 = a / p26; printf("%d : %d = %d ", a, p26, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p27 == 0) { x1 = a / p27; printf("%d : %d = %d ", a, p27, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p28 == 0) { x1 = a / p28; printf("%d : %d = %d ", a, p28, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p29 == 0) { x1 = a / p29; printf("%d : %d = %d ", a, p29, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p30 == 0) { x1 = a / p30; printf("%d : %d = %d ", a, p30, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p31 == 0) { x1 = a / p31; printf("%d : %d = %d ", a, p31, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p32 == 0) { x1 = a / p32; printf("%d : %d = %d ", a, p32, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p33 == 0) { x1 = a / p33; printf("%d : %d = %d ", a, p33, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p34 == 0) { x1 = a / p34; printf("%d : %d = %d ", a, p34, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p35 == 0) { x1 = a / p35; printf("%d : %d = %d ", a, p35, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p36 == 0) { x1 = a / p36; printf("%d : %d = %d ", a, p36, x1); printf("\n"); a = x1; } } //_____________________________________________ for (i=0; i<=40; i++) { if (a%p37 == 0) { x1 = a / p37; printf("%d : %d = %d ", a, p37, x1); printf("\n"); a = x1; } } }while(1); } 😂
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα