Parcourir la source

Make two versions of Baillie-PSW test

Petra Lamborn il y a 5 ans
Parent
révision
f3eb331e6b
2 fichiers modifiés avec 29 ajouts et 16 suppressions
  1. 29
    0
      bailliePSW.py
  2. 0
    16
      millerrabin.py

+ 29
- 0
bailliePSW.py Voir le fichier

1
+from psimp import in_100, hund_div
2
+from lucas import LucasPrime, StrongLucasPrime
3
+from millerrabin import MillerRabin
4
+from sieve import sieval
5
+from time import process_time
6
+
7
+
8
+def BailliePSW(n):
9
+    if n < 2:
10
+        return False
11
+    if in_100(n):
12
+        return True
13
+    if hund_div(n) != 0:
14
+        return False
15
+    if MillerRabin(n, 2):
16
+        return False
17
+    return StrongLucasPrime(n)
18
+
19
+
20
+def BailliePSWWeak(n):
21
+    if n < 2:
22
+        return False
23
+    if in_100(n):
24
+        return True
25
+    if hund_div(n) != 0:
26
+        return False
27
+    if MillerRabin(n, 2):
28
+        return False
29
+    return LucasPrime(n)

+ 0
- 16
millerrabin.py Voir le fichier

37
         if x == n - 1:
37
         if x == n - 1:
38
             return False
38
             return False
39
     return True
39
     return True
40
-
41
-
42
-# Print pseudoprimes greater than 100 for each base, from base 1 to 15
43
-for base in range(2, 16):
44
-    print("{}:".format(base))
45
-    for i in range(2, 10000):
46
-        if i % 2 == 0 or base % i == 0:
47
-            continue
48
-        if MillerRabin(i, base) == (p.hund_div(i) == 0):
49
-            print(i, p.hund_div(i), MillerRabin(i, base))
50
-    print()
51
-
52
-MillerRabin(28, 3)
53
-print(pow(3, 27, 28))
54
-print(pow(3, 27))
55
-print(pow(3, 27) % 28)