01/10/2018, 10:57

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

rogp10 viết 13:05 ngày 01/10/2018

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

Hung viết 13:03 ngày 01/10/2018

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

Bài liên quan
0