def FxZahlZuMaxExponent(FxZahlZuExponent, FxZahlTeiler):
FxZahlExponentMax=1
while FxZahlZuExponent>=FxZahlTeiler:
FxZahlZuExponent=FxZahlZuExponent//FxZahlTeiler
FxZahlExponentMax=FxZahlExponentMax+1
return FxZahlExponentMax
# FxTeilerOffset = 0 -> 2, 3, 5 --> FxIndexTeiler --> 0..2
# FxTeilerOffset = 3 -> 1, 7, 11, 13, 17, .... --> FxIndexTeiler --> 0..?
def FxIndexZuZahl(FxIndexTeiler, FxTeilerOffset):
TeilerFunction = 1
TeilerIndexFunction = 1
RestIndexTeilerFunction = 1
SpaltenWerteArray = [1, 7, 11, 13, 17, 19, 23, 29]
TeilerWerte235Array = [ 2, 3, 5 ]
FxIndexTeiler=FxIndexTeiler+FxTeilerOffset
if FxIndexTeiler < 3: # Teiler 1,2,3,5
TeilerFunction=TeilerWerte235Array[FxIndexTeiler]
else:
RestIndexTeilerFunction = (FxIndexTeiler-3) % 8 # % --> mod
#TeilerFunction=int((FxIndexTeiler-RestIndexTeilerFunction)/8)*30
TeilerFunction=((FxIndexTeiler-RestIndexTeilerFunction)//8)*30
TeilerFunction=TeilerFunction+SpaltenWerteArray[RestIndexTeilerFunction]
return TeilerFunction
RestWerteZuIndex=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
16,17,18,19,20,21,22,23,24,25,26,27,28,29]
RestZuIndex=[0,0,2,3,4,5,6,1,8,9,10,2,12,3,14,15,
16,4,18,5,20,21,22,6,24,25,26,27,28,7]
p = [2,3,5,7,13,17,19,31,
61,89,107,127,521,607,1279,2203,
2281,3217,4253,4423,9689,9941,11213,19937,
21701,23209,44497,86243,110503,132049,216091,756839,
859433,1257787,1398269,2976221,3021377,6972593,13466917,20996011,
24036583,25964951,30402457,32582657,37156667,42643801,43112609,57885161,
74207281,77232917,0,0,0,0,0,0]
IndexAufArrayP=15
IndexMaxFor=((p[IndexAufArrayP] // 30)*8)+ RestZuIndex[p[IndexAufArrayP] % 30]
IndexMaxFor=IndexMaxFor+3+1
#walltime cputime
IndexMinFor=0
#IndexMaxFor=50 # 345 --> 1279 591 --> 2203
FxIndexZuZahlOffset=0
t = walltime()
for i in range(IndexMinFor , IndexMaxFor):
IndexZuZahl=FxIndexZuZahl(i, FxIndexZuZahlOffset)
if is_prime(IndexZuZahl):
wZahl=2^IndexZuZahl-1
wZahlRest=wZahl % 10
if (wZahlRest == 1) or (wZahlRest == 3) or (wZahlRest == 7) or (wZahlRest == 9):
if is_prime(wZahl):
IndexMinFor=FxIndexZuZahlOffset
DezimalStellen=FxZahlZuMaxExponent(wZahl, 2)
print('%10s %10s %10s %10s %20s' % (IndexMaxFor, i+(FxIndexZuZahlOffset-3), IndexZuZahl,
DezimalStellen%30, walltime(t)))
print""
for IndexP in range(0,IndexAufArrayP+1):
HochZahl=p[IndexP]
t = walltime()
wZahl=2^HochZahl-1
if is_prime(wZahl):
print('%10s %35s' % (HochZahl, walltime(t)))
591 -3 2 2 0.0
591 -2 3 3 0.0
591 -1 5 5 0.0
591 1 7 7 0.0
591 3 13 13 0.0
591 4 17 17 0.0
591 5 19 19 0.0
591 8 31 1 0.0
591 16 61 1 0.0
591 23 89 29 0.0
591 28 107 17 0.00781202316284
591 33 127 7 0.00781202316284
591 138 521 11 1.140625
591 161 607 7 2.796875
591 341 1279 19 20.4296870232
591 587 2203 13 210.524414062
2 0.0
3 0.0
5 0.0
7 0.0
13 0.0
17 0.0
19 0.0
31 0.0
61 0.0
89 0.0
107 0.0
127 0.00781202316284
521 1.109375
607 1.64843797684
1279 17.3359370232
2203 210.766602039