Hỏi về việc tối ưu code trong python

import math
def snt(x):
	i = 2
	while i <= math.sqrt(x):
		if x%i == 0:
			return 0
		i+=1
	return 1
def dx(x):
	reverse = 0
	temp = x
	while temp != 0:
		rem = temp % 10
		reverse = reverse*10 + rem
		temp //= 10
	if reverse == x:
		return 0
	else:
		return 1
t = int(raw_input())
def tong(x,y):
	dem = 0
	i = x+1
	if i%2 ==0:
		i+=1
	while i < y:
		if snt(i)==1 and dx(i)==0:
			dem+=1
		i+=2
	print dem
while t > 0:
	
	a = raw_input().split()
	for i in range(len(a)):
		a[i] = int(a[i])
	tong(a[0],a[1])
	t-=1

Mình có đoạn code trên với yêu cầu là tìm xem trong khoảng từ x đến y (hai tham số truyền vào là a[0] và a[1]) có bao nhiêu số vừa là số nguyên tố, vừa là số đối xứng.
Mình làm đến đây có vẻ đúng nhưng có một vấn đề là code chạy quá chậm. Mong mọi người giúp mình tối ưu đoạn code này cho chạy nhanh hơn. Xin cảm ơn

Bạn chỉ cần xây dựng 1 nửa rồi đảo lại là ra đối xứng.

2 Likes

Theo ý của mình, bạn nên xây 1 hàm sinh ra 1 mảng số đối xứng trong 1 khoảng (a,b) thay vì duyệt từng phần tử trong mảng (a,b) kiểm tra có phải số đối xứng.

Sau đó lọc (filter) mảng đối xứng tìm được, kiểm tra số nào là số nguyên tố.

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