Υπολογισμός και λήψη του μεγαλύτερου κοινού διαιρέτη και του μικρότερου κοινού πολλαπλάσιου στην Python

Επιχείρηση

Ακολουθεί μια περιγραφή του τρόπου υπολογισμού και λήψης του μεγαλύτερου κοινού διαιρέτη και του μικρότερου κοινού πολλαπλάσιου στην Python.

  • Ο μεγαλύτερος κοινός διαιρέτης και το μικρότερο κοινό πολλαπλάσιο δύο ακεραίων αριθμών
  • Ο μεγαλύτερος κοινός διαιρέτης και το μικρότερο κοινό πολλαπλάσιο τριών ή περισσότερων ακεραίων αριθμών

Σημειώστε ότι οι προδιαγραφές των συναρτήσεων που παρέχονται στην τυπική βιβλιοθήκη διαφέρουν ανάλογα με την έκδοση της Python. Ένα παράδειγμα υλοποίησης μιας συνάρτησης που δεν περιλαμβάνεται στην τυπική βιβλιοθήκη παρουσιάζεται επίσης σε αυτό το άρθρο.

  • Python 3.4 ή νωρίτερα
    • GCD:fractions.gcd()(μόνο δύο επιχειρήματα)
  • Python 3.5 ή νεότερη έκδοση
    • GCD:math.gcd()(μόνο δύο επιχειρήματα)
  • Python 3.9 ή νεότερη έκδοση
    • GCD:math.gcd()(υποστηρίζει περισσότερα από τρία επιχειρήματα)
    • ελάχιστος κοινός παρονομαστής:math.lcm()(υποστηρίζει περισσότερα από τρία επιχειρήματα)

Εδώ εξηγούμε τη μέθοδο χρησιμοποιώντας την τυπική βιβλιοθήκη της Python.Η NumPy μπορεί εύκολα να χρησιμοποιηθεί για τον υπολογισμό του μεγαλύτερου κοινού διαιρέτη και του μικρότερου κοινού πολλαπλάσιου για κάθε στοιχείο πολλαπλών πινάκων.

Ο μεγαλύτερος κοινός διαιρέτης και το μικρότερο κοινό πολλαπλάσιο δύο ακεραίων αριθμών

GCD

Από την έκδοση 3.5 της Python, υπάρχει η συνάρτηση gcd() στην ενότητα math.

  • greatest common divisor

Επιστρέφει τον μεγαλύτερο κοινό διαιρέτη του ακέραιου που καθορίζεται στο όρισμα.

import math

print(math.gcd(6, 4))
# 2

Σημειώστε ότι στην Python 3.4 και νωρίτερα, η συνάρτηση gcd() βρίσκεται στην ενότητα fractions και όχι στην ενότητα math.fractions πρέπει να εισαχθεί και η fractions.gcd().

ελάχιστος κοινός παρονομαστής

Η συνάρτηση lcm(), η οποία επιστρέφει το ελάχιστο κοινό πολλαπλάσιο, προστέθηκε στην ενότητα math στην Python 3.9. lcm είναι ένα ακρωνύμιο για το

  • least common multiple

Επιστρέφει το ελάχιστο κοινό πολλαπλάσιο του ακέραιου αριθμού που καθορίζεται στο όρισμα.

print(math.lcm(6, 4))
# 12

Πριν από την Python 3.8, η lcm() δεν παρέχεται, αλλά μπορεί εύκολα να υπολογιστεί χρησιμοποιώντας την gcd().

lcm(a, b) = a * b / gcd(a, b)

Παράδειγμα εφαρμογής.

def my_lcm(x, y):
    return (x * y) // math.gcd(x, y)

print(my_lcm(6, 4))
# 12

/Δεδομένου ότι αυτό οδηγεί σε ένα δεκαδικό float, χρησιμοποιούνται δύο backslashes για την αποκοπή του δεκαδικού σημείου και την επιστροφή ενός ακέραιου αποτελέσματος διαίρεσης. Σημειώστε ότι δεν γίνεται καμία επεξεργασία για να προσδιοριστεί αν το όρισμα είναι ακέραιος ή όχι.

Ο μεγαλύτερος κοινός διαιρέτης και το μικρότερο κοινό πολλαπλάσιο τριών ή περισσότερων ακεραίων αριθμών

Python 3.9 ή νεότερη έκδοση

Ξεκινώντας από την Python 3.9, όλες οι παρακάτω συναρτήσεις υποστηρίζουν περισσότερα από τρία ορίσματα.

  • math.gcd()
  • math.lcm()
print(math.gcd(27, 18, 9))
# 9

print(math.gcd(27, 18, 9, 3))
# 3

print(math.lcm(27, 9, 3))
# 27

print(math.lcm(27, 18, 9, 3))
# 54

*Αν θέλετε να υπολογίσετε το μεγαλύτερο κοινό διαιρέτη ή το μικρότερο κοινό πολλαπλάσιο των στοιχείων μιας λίστας, καθορίστε το όρισμα με αυτό.

l = [27, 18, 9, 3]
print(math.gcd(*l))
# 3

print(math.lcm(*l))
# 54

Python 3.8 ή νωρίτερα

Πριν από την Python 3.8, η συνάρτηση gcd() υποστήριζε μόνο δύο ορίσματα.

Για την εύρεση του μεγαλύτερου κοινού διαιρέτη ή του μικρότερου κοινού πολλαπλάσιου τριών ή περισσότερων ακεραίων αριθμών, δεν απαιτείται ιδιαίτερα περίπλοκος αλγόριθμος- απλά υπολογίστε τον μεγαλύτερο κοινό διαιρέτη ή το μικρότερο κοινό πολλαπλάσιο για κάθε μία από τις πολλαπλές τιμές με τη σειρά χρησιμοποιώντας τη συνάρτηση ανώτερης τάξης reduce().

GCD

from functools import reduce

def my_gcd(*numbers):
    return reduce(math.gcd, numbers)

print(my_gcd(27, 18, 9))
# 9

print(my_gcd(27, 18, 9, 3))
# 3

l = [27, 18, 9, 3]
print(my_gcd(*l))
# 3

Και πάλι, σημειώστε ότι πριν από την Python 3.4, η συνάρτηση gcd() βρίσκεται στην ενότητα fraction και όχι στην ενότητα math.

ελάχιστος κοινός παρονομαστής

def my_lcm_base(x, y):
    return (x * y) // math.gcd(x, y)

def my_lcm(*numbers):
    return reduce(my_lcm_base, numbers, 1)

print(my_lcm(27, 9, 3))
# 27

print(my_lcm(27, 18, 9, 3))
# 54

l = [27, 18, 9, 3]
print(my_lcm(*l))
# 54
Copied title and URL