Skip to content

Commit 0c3de2b

Browse files
authored
Update carmichael.py
Some performance improvements.
1 parent b94a776 commit 0c3de2b

File tree

1 file changed

+34
-14
lines changed

1 file changed

+34
-14
lines changed

Carmichael Numbers/carmichael.py

+34-14
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,51 @@
11
import math
22

3-
def isPrime(n):
4-
i = 2
5-
while i <= math.sqrt(n):
6-
if n % i == 0:
3+
def isPrime(num):
4+
if num <= 3:
5+
return num > 1
6+
if num % 2 == 0:
7+
return False
8+
if num % 3 == 0:
9+
return False
10+
i = 5
11+
while i <= math.sqrt(num):
12+
if num % (i) == 0 or num % (i+2) == 0:
713
return False
8-
i += 1
14+
i += 6
915
return True
10-
16+
17+
def isCoprime(a, b):
18+
return math.gcd(a, b) == 1
19+
1120
def isCarmichael(n):
1221
if isPrime(n):
1322
return False
14-
for i in range(1, n):
15-
if i**n % n == i:
16-
continue
17-
else:
18-
return False
23+
if n % 2 == 0:
24+
for i in range(1, n, 2):
25+
if isCoprime(n, i):
26+
if i**(n-1) % n == 1:
27+
continue
28+
else:
29+
return False
30+
else:
31+
for i in range(1, n):
32+
if isCoprime(n, i):
33+
if i**(n-1) % n == 1:
34+
continue
35+
else:
36+
return False
1937
return True
2038

2139
def main():
2240
n = int(input('Enter n: '))
2341
count = -1
24-
curr = 0
42+
curr = 3
2543
while count < n:
26-
curr += 1
44+
curr += 2
2745
if isCarmichael(curr):
2846
count += 1
2947
print(curr)
3048

31-
main()
49+
if __name__ == '__main__':
50+
main()
51+

0 commit comments

Comments
 (0)