Browse Source

Make two versions of Baillie-PSW test

Petra Lamborn 5 years ago
parent
commit
f3eb331e6b
2 changed files with 29 additions and 16 deletions
  1. 29
    0
      bailliePSW.py
  2. 0
    16
      millerrabin.py

+ 29
- 0
bailliePSW.py View File

@@ -0,0 +1,29 @@
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 View File

@@ -37,19 +37,3 @@ def MillerRabin(n, base):
37 37
         if x == n - 1:
38 38
             return False
39 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)