01/10/2018, 10:49
Hỏi về code liên quan đến số nguyên tố
Mọi người cho mình hỏi:
nums = range(2, 50)
for i in range(2, 8):
nums = filter(lambda x: x == i or x % i, nums)
print nums
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
Chỗ x % i làm gì mà sao in ra toàn số nguyên tố vậy?
Và khi bỏ vế x == i đổi thành như vầy:
nums = range(2, 50)
for i in range(2, 8):
nums = filter(lambda x: x % i, nums)
print nums
[11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
Thì sao nó bỏ số nguyên tố từ khoảng “2, 3, 5, 7” vậy? Ai cho mình câu trả lời với!
Bài liên quan
Bạn format code bằng cách sử dụng các kí tự
Vậy từ khoảng 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47 cũng chia cho chính nó HK boy nhưng sao nó ghi x % i mà i là từ 2 đến 8? Trả lời dùm mình. Cảm ơn!
Mình cũng format lại code rồi
Bạn không đọc code của bạn à
Ý nghĩa của cả code bạn như thế này nhé:
x == i or x % i
, điều kiện này tương đương với nếu x bằng 1 số i nào đó trong khoảng từ 2 đến 7 hoặc x không chia hết cho mọi số i trong khoảng từ 2 đến 7 thì x là số nguyên tố. Mấu chốt là ở đây. Nếu bạn bỏ đix == i
thì với những số 2, 3, 5, 7; chúng sẽ bị rơi vào trường hợp chia hết cho chính nó. Mà khái niệm số nguyên tố là những số nguyên dương không chia hết cho bất kì số nguyên dương nào khác 1 và chính nó. Do vậy, với những số đặc biệt trong trường hợp này (2, 3, 5, 7), ta phải tạo 1 trường hợp để nó có thể pass qua điều kiện.Hàm
filter(function, list)
trả về những phần tửx
trong listnums
mà thỏa mãn khi đưa phần tửx
đó vào lambda function thì nó return True.x % i
trả về 0 hoặc khác 0, tương đương với False hoặc True.range(2, 8) = [2, 7]
, Nếu bạn đã làm theo cách thông thường để kiểm tra 1 số có phải số nguyên tố hay không bạn sẽ biết số 7 lấy từ đâu (liên hệ với listnums
)