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!

HK boy viết 12:55 ngày 01/10/2018

Bạn format code bằng cách sử dụng các kí tự

Rất nhiều lần bạn đã up code mà không format rồi. Mình sẽ :flag_black: 1 lần để cảnh cáo.

---
Với điều kiện
[quote="An_Thuy, post:1, topic:51582"]
x == i or x % i
[/quote]

tức là `x == i` hoặc `x % i > 0` thì các số 2, 3, 5, 7 chia hết cho chính nó. Bạn bỏ x == i đi thì mất 2, 3, 5, 7 vì các số này chia hết cho các số `i` thuộc khoảng `range(2, 8)`: `x = 2` chia hết cho `i = 2`, `x = 3` chia hết cho `i = 3`,...
An Thúy viết 12:53 ngày 01/10/2018

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

HK boy viết 12:59 ngày 01/10/2018

sao nó ghi x % i mà i là từ 2 đến 8?

Bạn không đọc code của bạn à

Ý nghĩa của cả code bạn như thế này nhé:

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]

  • Dòng 1: chỉ là gán các số trong khoảng từ 2 đến 49 vào nums.
  • Dòng 2: chạy biến i với các giá trị từ 2 đến 7.
  • Dòng 3: đặc biệt chú ý đến điều kiện 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ỏ đi x == 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.
Ice Tea viết 12:52 ngày 01/10/2018

Hàm filter(function, list) trả về những phần tử x trong list nums 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 list nums)

Bài liên quan
0