Tìm số nguyên tố bằng vòng lặp while trong Python

Em đang viết một vòng lặp while như thế này để tìm số nguyên tố từ 2 đến 100:

    i = 2
    while (i < 100):
        j = 2
        while (j < (i/j)):
            if not (i%j):
                print "%d khong la so nguyen to" %i
                break
            j = j + 1
        if (j > i/j):
            print i, " la so nguyen to"
        i = i + 1

Nhưng khi chạy thì có lỗi là vòng lặp sẽ bỏ qua không xét một vài số kể cả số đó có phải là số nguyên tố hay không? Mọi người giải thích giúp em rằng em sai chỗ nào được không ạ?

bạn có thể nói rõ là nó miss số nào không :smile:

đây ạ. nó không hiện một vài số trong hình ạ.

bạn dùng python mấy vậy? Chứ kết quả mình tuy không có số 4 nhưng có số 5. Và khi test thì nó lượt hết đủ các số nguyên tố

nó có bỏ qua nhưng nó vẫn lượt đủ

Em dùng python 2.7 ạ. Ủa nhưng ý em lại tại sao nó lại không hiện ra ấy ạ? Em chưa hiểu sai ở đâu cả.

bạn sửa while j <= (i/j): dòng số 4
Giả sử i = 4, lúc này j < (i/j) tức là 2 < 2 nên nó bỏ qua vòng lặp while, nó lại so sánh tiếp 2 > 2 ở chỗ if nên bỏ qua tiếp vì không thỏa điều kiện.

1 Like

ở trường hợp i = 4 thì lúc vào vòng lặp thì j = 2 ta sẽ có 2 < 4 / 2 sai bỏ qua vòng lặp. xuống dưới xét điều kiện 2 > 4 / 2 cũng sai => không in 4. Trường hợp là 5 thì cũng giống y chang nhưu trên 2 điều kiện đều không thỏa vì 5/2 ở python 2 sẽ là bằng 2 còn ở python3 thì 5/2 sẽ bằng 2.5 nên ở đây chúng ta sẽ có 5 là số nguyên tố. Script trên chỉ đúng với python3. Còn nếu muốn đúng ở python2 thì bạn phải float(i/j)

2 Likes

à thì ra vậy. em cảm ơn các anh.

Nên dùng while … else nếu biểu thức if sau while cùng điều kiện

i = 2
while i < 100:
    j = 2
    while j <= i // j:
        if i % j == 0:
            print ("%d khong la so nguyen to" %i)
            break
        j = j + 1
    else:
        print (i, "la so nguyen to")
    i = i + 1
1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?