irrationale Zahlen, python?

3 Antworten

Beispielsweise so:

from math import sqrt, pi

def gcd(a, b):
    """Berechnet den größten gemeinsamen Teiler zweier ganzer Zahlen a und b 
    mit Hilfe des euklidischen Algorithmus"""
    while b:
        a, b = b, a % b
    return(a)

lower = sqrt(17)-4
upper = pi*pi-9

n = 0
for b in range(1, 11):
    for a in range(1, 11):
        if lower < a/b < upper and gcd(a, b) == 1:
            n += 1
            print(f"{a}/{b}")
print(f"Gesuchte Anzahl: {n}")

Ausgabe dieses Python-Skripts:

1/2
1/3
2/3
1/4
3/4
1/5
2/5
3/5
4/5
1/6
5/6
1/7
2/7
3/7
4/7
5/7
6/7
1/8
3/8
5/8
2/9
4/9
5/9
7/9
3/10
7/10
Gesuchte Anzahl: 26

============

Meine Vorgehensweise dabei:

Definiere eine Funktion gcd(a, b), welche den größten gemeinsamen Teiler zweier Zahlen a, b zurückgibt. Dann kann man mit gcd(a, b) == 1 prüfen, ob der Bruch a/b vollständig gekürzt ist.

Mit einer (bzw. zwei) for-Schleife(n) für a und b gehe ich dann die Brüche a/b durch und überprüfe jeweils, ob a/b im entsprechenden Intervall liegt und der Bruch vollständig gekürzt ist.

Zwar vermutlich nicht so, wie vom Aufgabensteller erwartet, aber einfach:

import math

a = math.sqrt(17) - 4
b = math.pi * math.pi - 9
n = 0

# alle gekürzten Brüche >0 und <1 mit den Nennern 2 bis 10:

numbers = [1/2, 1/3, 2/3, 1/4, 3/4, 1/5, 2/5, 3/5, 4/5,
1/6, 5/6, 1/7, 2/7, 3/7, 4/7, 5/7, 6/7, 1/8, 3/8, 5/8, 7/8,
1/9, 2/9, 4/9, 5/9, 7/9, 8/9, 1/10, 3/10, 7/10, 9/10]

for x in numbers:
  if x > a and x < b:
    n += 1
   
print(n, 'Brüche')

Ich kann leider fast kein Python, aber generell würde ich zwei geschachtelte for-Schleifen verwenden, eine für den Zähler (von 1 bis 10) und eine für den Nenner (ausprobieren, welcher Bereich Sinn macht), und dann mit einer if-Bedingung prüfen, ob der Bruch zwischen den beiden Zahlen liegt. Wenn dann noch der ggT von Zähler und Nenner 1 ist, könnte eine Zählvariable um eins nach oben gesetzt werden.

Woher ich das weiß:Studium / Ausbildung – Studium Mathematik Lehramt für die Sekundarstufen II/I