Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit36828b1

Browse files
Julien00859poyea
authored andcommitted
[FIX] maths/PrimeCheck (TheAlgorithms#796)
Current implementation is buggy and hard to read.* Negative values were raising a TypeError due to `math.sqrt`* 1 was considered prime, it is not.* 2 was considered not prime, it is.The implementation has been corrected to fix the bugs and to enhancereadability.A docstring has been added with the definition of a prime number.A complete test suite has been written, it tests the 10 first primes, anegative value, 0, 1 and some not prime numbers.closesTheAlgorithms#795
1 parent56513cb commit36828b1

File tree

1 file changed

+48
-7
lines changed

1 file changed

+48
-7
lines changed

‎maths/PrimeCheck.py

Lines changed: 48 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,54 @@
11
importmath
2+
importunittest
3+
4+
25
defprimeCheck(number):
3-
ifnumber%2==0andnumber>2:
6+
"""
7+
A number is prime if it has exactly two dividers: 1 and itself.
8+
"""
9+
ifnumber<2:
10+
# Negatives, 0 and 1 are not primes
411
returnFalse
5-
returnall(number%iforiinrange(3,int(math.sqrt(number))+1,2))
12+
ifnumber<4:
13+
# 2 and 3 are primes
14+
returnTrue
15+
ifnumber%2==0:
16+
# Even values are not primes
17+
returnFalse
18+
19+
# Except 2, all primes are odd. If any odd value divide
20+
# the number, then that number is not prime.
21+
odd_numbers=range(3,int(math.sqrt(number))+1,2)
22+
returnnotany(number%i==0foriinodd_numbers)
23+
24+
25+
classTest(unittest.TestCase):
26+
deftest_primes(self):
27+
self.assertTrue(primeCheck(2))
28+
self.assertTrue(primeCheck(3))
29+
self.assertTrue(primeCheck(5))
30+
self.assertTrue(primeCheck(7))
31+
self.assertTrue(primeCheck(11))
32+
self.assertTrue(primeCheck(13))
33+
self.assertTrue(primeCheck(17))
34+
self.assertTrue(primeCheck(19))
35+
self.assertTrue(primeCheck(23))
36+
self.assertTrue(primeCheck(29))
37+
38+
deftest_not_primes(self):
39+
self.assertFalse(primeCheck(-19),
40+
"Negative numbers are not prime.")
41+
self.assertFalse(primeCheck(0),
42+
"Zero doesn't have any divider, primes must have two")
43+
self.assertFalse(primeCheck(1),
44+
"One just have 1 divider, primes must have two.")
45+
self.assertFalse(primeCheck(2*2))
46+
self.assertFalse(primeCheck(2*3))
47+
self.assertFalse(primeCheck(3*3))
48+
self.assertFalse(primeCheck(3*5))
49+
self.assertFalse(primeCheck(3*5*7))
650

7-
defmain():
8-
print(primeCheck(37))
9-
print(primeCheck(100))
10-
print(primeCheck(77))
1151

1252
if__name__=='__main__':
13-
main()
53+
unittest.main()
54+

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp