Python :: Aufgabe #151
4 Lösungen

Symmetrische Primzahlen
Anfänger - Python
von hollst
- 03.04.2017 um 13:55 Uhr
Wieviele Primzahlen P < 1.000.000 sind rückwärts gelesen auch eine Primzahl, jedoch ungleich sich selbst?
Anmerkung: Die (Prim)zahlen 2, 3, 5, 7, 11 erfüllen nicht die Bedingungen (sind rückwärts gelesen sich selbst gleich),
als erste erfüllt die 13 die Bedingungen.
Anmerkung: Die (Prim)zahlen 2, 3, 5, 7, 11 erfüllen nicht die Bedingungen (sind rückwärts gelesen sich selbst gleich),
als erste erfüllt die 13 die Bedingungen.
Lösungen:

import math anzahl = 0 primzahlen = [] def prim(zahl): if zahl == 1: return False elif 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 for i in range(1000000): if prim(i) == True: primzahlen.append(i) for j in primzahlen: k = int(str(j)[::-1]) if k in primzahlen and k != j: anzahl += 1 print("Anzahl rückwärtsgelesener Primzahlen, die auch prim sind:",anzahl)

#Python3.7 # -*- coding: iso-8859-15 -*- def isItPrime(N): for D in range(2, N): if (D * D > N): break if N % D == 0: return False return True z=1 grenze=1000000 primes=[] print("Generiere Liste mit Primzahlen kleiner als {}".format(grenze)) while z<grenze: if isItPrime(z): primes.append(z) if len(primes)%10000==0:print(len(primes),"Primzahlen gefunden") z=z+1 print(len(primes),"Primzahlen werden jetzt überprüft.....") anzahl=0 for i in primes: ireverse=int(str(i)[::-1]) if ireverse in primes and ireverse!=i: #print(i,ireverse) #falls Ausgabe der Primzahlen und gewünscht ist anzahl=anzahl+1 print("Es gibt {} Primzahlen welche kleiner als {}, rückwärts gelesen auch eine Primzahl, jedoch ungleich sich selbst sind.".format(anzahl,grenze))

liste = list(range(13,1000000)) #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 #Nicht-Primzahlen entfernen for i in range(0,len(liste)): if prim_zahl(liste[i]) == 0: liste[i] = "X" for j in range(0,liste.count("X")): liste.remove("X") # Umgedrehte Nicht-Primzahlen und spiegelsymmetrische Primzahlen entfernen for i in range(0,len(liste)): a = "" for k in range(0,len(str(liste[ji]))): a= (str(liste[i]))[k] +a if prim_zahl(int(a)) == 0: liste[i] = "X" if liste[i] == int(a): liste[i] = "X" for j in range(0,liste.count("X")): liste.remove("X") print(len(liste)) # bei 1.000.000 bei mir Laufzeit sehr lang

prime_List = [] prime_bool = True rvs_prime_bool = True for i in range(1, 1000000): rvs_prime_bool = True prime_bool = True for j in range(2, (i - 1)): if i % j == 0: prime_bool = False #REVERSE a = str(i)[::-1] for j in range(2, (int(a) - 1)): if int(a) % j == 0: rvs_prime_bool = False if prime_bool and rvs_prime_bool: prime_List.append(i) print(prime_List)