01/10/2018, 09:50

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 ạ?

Henry viết 12:04 ngày 01/10/2018

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

tutu viết 11:51 ngày 01/10/2018

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

Henry viết 11:57 ngày 01/10/2018

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ố

Henry viết 11:55 ngày 01/10/2018

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

tutu viết 12:01 ngày 01/10/2018

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ả.

Nguyễn Duy Hùng viết 11:50 ngày 01/10/2018

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.

Henry viết 12:00 ngày 01/10/2018

ở 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)

tutu viết 11:57 ngày 01/10/2018

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

Gió viết 12:03 ngày 01/10/2018

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
Bài liên quan
0