Python :: Aufgabe #261

4 Lösungen Lösungen öffentlich

Zwei-Quadrate-Satz (Fermat / Girard)

Anfänger - Python von JKooP - 06.04.2020 um 14:49 Uhr
1. Schreibe eine Funktion bzw. Methode mit der es möglich ist zu überprüfen, ob es sich bei der eingegebenen Zahl um eine Primzahl handelt.

2. Erweitere das Programm dahingehend, dass nur die ungeraden Primzahlen ausgegeben werden, welche dem Quadrate- Satz von
Fermat entsprechen. Also der Summe zweier ganzzahliger Quadrate.

Beispiele:
5 = 1² + 2², 13 = 2² + 3², 17 = 1² + 4², …

Gegenbeispiele:
3, 7, 11, 19 funktionieren nicht, da sie durch 4 geteilt (Modulo 4) nicht den Wert 1 ergeben. Daher gibt es auch keine Lösung (4n+1).

3. Erweitere das Programm wiederum, sodass die möglichen Lösungen aus als Zahlenpaare auf dem Bildschirm ausgegeben werden.
z.B.: 13 (2,3)

Viel Spaß

Lösungen:

2 Kommentare
1x
vote_ok
von satn1241 (3090 Punkte) - 07.04.2020 um 17:30 Uhr
Quellcode ausblenden Python-Code
liste = list(range(2,100))

#Primzahltest
def prim_zahl(zahl):
    a = int(zahl**0.5)
    for j in range(2, a+1):
        if zahl%j ==0:
            b = 0
            break
        else:
            b = 1
    return b
#Quadrate-Satz von Fermat
for k in range(0,len(liste)):
    zahl = liste[k]
    for i in range(int(zahl**0.5),0,-1):
        for j in range(0,i):
            if (i*i+j*j) == zahl:
                print("Zahl = ",zahl)
                print("z1  = ", j)
                print("z2 = ",i)
                print()
                break
1x
vote_ok
von satn1241 (3090 Punkte) - 07.04.2020 um 17:35 Uhr
Quellcode ausblenden Python-Code
liste = list(range(4,100))

#Primzahltest
def prim_zahl(zahl):
    a = int(zahl**0.5)
    for j in range(2, a+1):
        if zahl%j ==0:
            b = 0
            break
        else:
            b = 1
    return b
#Quadrate-Satz von Fermat
for k in range(0,len(liste)):
    zahl = liste[k]
    if prim_zahl(zahl) == 1:
        for i in range(int(zahl**0.5),0,-1):
            for j in range(0,i):
                if (i*i+j*j) == zahl:
                    print("Zahl = ",zahl)
                    print("z1  = ", j)
                    print("z2 = ",i)
                    print()
                    break
vote_ok
von jigga (4260 Punkte) - 09.04.2020 um 13:38 Uhr
Quellcode ausblenden Python-Code
import math

liste = []
zahl = int(input("Zu prüfende Zahl eingeben: "))

def prim(zahl):
    if zahl == 2:
        return True    
    elif zahl % 2 == 0:
        return False
    else:
        for i in range(3,int(math.sqrt(zahl)) + 1,2):
            if zahl % i == 0:
                return False
        return True

if prim(zahl) == True:

	print(str(zahl), "ist eine Primzahl")

	for i in range(1, int(zahl/4)+1):
		if i*4 + 1 == zahl:
			liste.append(i)
			break

	if len(liste) > 0:
		for i in range(1,int(math.sqrt(zahl))+1):
			if len(liste) == 3:
				break
			for j in range(1,int(math.sqrt(zahl))+1):
				if i**2 + j**2 == zahl:
					liste.append(str(i)+"²")
					liste.append(str(j)+"²")
					break

		print(str(zahl),"=",liste[1],"+",liste[2])
else:
	print(str(zahl), "ist keine Primzahl")
vote_ok
von Girofox (20 Punkte) - 19.04.2020 um 20:15 Uhr
Quellcode ausblenden Python-Code
def prim_generator(n):
    L = [2, 3, 5, 7]
    L1 = [i for i in range(2,n+1) for j in range(4) if i % L[j] == 0]
    x = [i for i in range(2,n+1) if i not in L1]
    L.extend(x)
    return L

#Primzahltest
def prim_zahl(zahl):
    L = [2, 3, 5, 7]
    L1 = [i for i in range(2,zahl+1) for j in range(4) if i % L[j] == 0]
    L.extend([i for i in range(2,zahl+1) if i not in L1])
    if zahl in L:
        return 1
    else:
        return 0
# Quadrate-Satz von Fermat
liste = prim_generator(100)
liste = [liste[i] for i in range(len(liste)) if liste[i]%4==1]
print(liste)
1813409

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.