Code in ra số nguyên tố <= N

Chào AD và các bạn trong group!
Em có một câu hỏi về Python. Mong mọi người giúp em với ạ!
Em cảm ơn!
Bài toán của em là : " Nhập vào một số nguyên N in ra màn hình những số là số nguyên tố trong khoảng N( nếu N là số nguyên tố in ra cả N)"
Code :

a = int(input("Moi nhap so: "))
flag = True

for i in range (2, a+1):
	for j in range (2, i):
		if (i % j == 0):
			flag == False
			break
	if flag:
		print i

Câu hỏi của bạn là gì?

1 Like

Chắc thay i bằng math.sqrt(i) chăng :smiley:

2 Likes

Dòng này là sao đây :neutral_face:

Mà code sai logic rồi.

2 Likes

Bạn có thể tham khảo code dưới đây.

import math


def is_prime(n):
    if (n % 2 == 0 and n > 2) or (n < 2):
        return False
    return all(n % i for i in range(3, int(math.sqrt(n)) + 1, 2))


def main():
    a = int(input("Enter the number: "))
    print([x for x in range(a + 1) if is_prime(x)])


if __name__ == '__main__':
    main()

cố gắng loại bỏ nested-loop, càng ít sử dụng càng đơn giản khi debug và đọc code sau này.

Đoạn code trên sử dụng phương pháp bruteforce để lấy toàn bộ những số nguyên tố <= n vì vậy không phải là phương pháp tối ưu để kiểm tra số nguyên tố có giá trị cực lớn.

[1] Đoạn code trên tham khảo ở stackoverflow: https://stackoverflow.com/questions/18833759/python-prime-number-checker

Edit 1: 2 là số nguyên tố, thanks @tntxtnt

4 Likes

Cảm ơn bạn!
Theo mình thì : ban đầu mình khởi tạo biến flag = True sau đó vào trong vòng lặp nếu gặp i % j == 0 thì đánh dấu đó là sai?

Đó là đúng, nhưng bạn không reset lại dấu sau mỗi vòng lặp i.

2 Likes

n <= 2 return false vậy 2 ko phải là snt à :V

Bạn tự xem lại cú pháp đi. Toán tử gán là = hay ==?

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