Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import math
- from decimal import Decimal, Context
- ctx = Context(prec=20)
- # Generator, um Primzahlen zu erzeugen
- def prim():
- yield 2
- i = 3
- while True:
- check = True
- for j in range(2, round(math.sqrt(i))+1):
- if i % j == 0:
- check = False
- if check:
- yield i
- i += 2
- # Das ist der Codeteil, der eigentlich interessiert.
- # Hier wird versucht, ein passendes n zu ermitteln
- # Die while-Schleife, also die ersten 8 Zeilen, sind der eigentliche Code
- # Der Rest dient zur Optimierung, damit nicht in 1er-Schritten hochgezählt wird
- def find_n(x):
- i = 1
- while True:
- a = ctx.log10(i*x + 1)
- b = ctx.log10(i*x - 1)
- if a == int(a):
- return a, "nicht alternierend"
- if b == int(b):
- return b, "alternierend"
- for k in list(range(20, 1, -1))+[1.9, 1.8, 1.7, 1.6, 1.5, 1.4, 1.3, 1.2, 1.1, 1.1, 1.01, 1.001, 1.0001, 1.00001, 1.000001, 1.0000001, 1.00000001, 1.000000001, 1.0000000001, 1.00000000001, 1.000000000001, 1.0000000000001, 1.00000000000001, 1.000000000000001]:
- i_alt = i
- while True:
- if k*i*x < 10**(len(str(i_alt*x)))-1 and math.floor(k*i) != i:
- i = math.floor(k*i)
- else:
- break
- i += 1 # Falls i nicht mehr mit Hilfe der obigen Optimierungen erhöht werden kann, um 1 erhöhen
- # Folgende 2 Funktionen sind vorest nicht von Bedeutung
- def alt_quersumme(n):
- return 10**9 % n
- def n_alt_quersumme(n):
- if not 10**9 % n == 0:
- return math.floor(10**9/n) * int("1"*n) + int("1"*(10**9 % n))
- else:
- return math.floor(10**9/n) * int("1"*n)
- # Hauptprogramm, aber eigentlich nicht so sehr von Bedeutung
- teiler = []
- for i in prim():
- if len(teiler) >= 40:
- break
- if not i == 5 and not i == 2:
- x = find_n(i)
- #print(str(i) + ": " + str(round(x[0])) + "er Quersumme, " + str(x[1]))
- if x[1][0] == "n":
- if n_alt_quersumme(round(x[0])) % i == 0:
- print("TEILER")
- teiler.append(i)
- else:
- if alt_quersumme(round(x[0])) % i == 0:
- print("TEILER")
- teiler.append(i)
- #print("\n--------------------------------------------------------------\n")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement