Tìm số nguyên tố thứ 10001

em dùng python dể làm projecteuler, em tới vòng 7 rồi, đề bài là tìm số nguyên tố thứ 10 001(10 ngàn lẻ 1), mọi người xem giúp em sai cái gì mà khi chạy nó ra 53 54 55 56 57 58

#problem7
count=1
n=1000
while count < 10002:
    for i in range (2,n+1):
        if (i%2!=0)and(i%3!=0)and(i%5!=0)and(i%7!=0)and(i%8!=0)and(i%9!=0):
            count+=1
        if count == 10001:
            print(i)

Số nguyên tố không chỉ có không chia hết cho các số từ 1->9 đâu bạn.

Bạn xem cách kiểm tra nguyên tố ở đây nhé:

Với lại, số nguyên tố thứ 10001 nằm ngoài đoạn [2, 1000] rồi nhé.

4 Likes

Số nguyên tố không chỉ chia hết cho 2,3,5,7 (nắm nguyên tắc số nguyên tố mà làm)

2 Likes

Bạn nên viết riêng 1 method kiểm tra số nguyên tố(vd num):

  • IsPrime:
    num <=1 không phải số nguyên tố
    num =2 là số nguyên tố
    xét các số từ 3 tới căn bậc 2 của num. Có thể dùng vòng lặp for hoặc while với bước nhảy +=2. Vì 2 là số nguyên tố chẵn duy nhất.
  • Rồi tới tìm số nguyên tố thứ 10001 bằng for hay while tùy ý.

Ah sau khi tìm ra rồi thì đo xem tìm hết bao nhiêu thời gian với python nhé. Làm ProjectEuler quan trọng là tối ưu thuật toán sao cho thời gian chạy nhanh nhất.

Mình viết trên C# mất 12ms trên máy win10, core i3 gen 2, ram 4gb

1 Like

Bạn thử lưu kết quả trước lại xem có nhanh hơn ko??

1 Like

thuật toán kiểm tra số nguyên tố của bạn sai rồi nhé. Lúc trước Introduction programming with Python, mình cũng giải ProjectEuler bằng python. Tuy lâu nhưng vì mới nhập môn nên thấy cũng hay và có ích. Có bài tận 1 tiếng mới ra kết quả :slight_smile:

1 Like

Bài nào bạn :smiley:

Mà bài này sàng rất nhanh.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?