Python 中的最大素数回文
Max Prime Palindrome in Python
我正在尝试创建一个程序,输出比回文最高且小于 1000 的素数。预期输出应为 929
尝试 1
number = 1
prime = 1
maxNumber = 1000
while number > maxNumber:
if str(number) == str(number)[::-1]: #Inverts the string
for number in range(number,maxNumber): #Increments number until 1000
for i in range(2, number): #Checks current number and divides all lower
if number % i == 0:
break
else:
prime = number
print(prime)
尝试 2
number = 3
prime = 3
maxNumber = 1000
while number < maxNumber:
if str(number) == str(number)[::-1]: #Inverts the string
for i in range(2, number):
if number % i == 0:
break
else:
prime = number
number+=1
print(prime)
尝试 3,我按照建议将两个函数分开以减少处理时间
for number in xrange(1000):
if str(number) == str(number)[::-1]: and is_prime(number):
prime = number
print(number)
#Method to find prime numbers
def is_prime(n):
if n == 2 or n == 3:
return True
elif n < 2 or n%2 == 0:
return False
elif n < 9:
return True
elif n%3 == 0:
return False
r = int(n**0.5)
f = 5
while f <= r:
if n%f == 0:
return False
if n%(f+2) == 0:
return False
f +=6
return True
尝试 4:收到错误 [名称 'is_prime' 未定义]
for number in range(1000,3,-1):
if str(number) == str(number)[::-1] and is_prime(number):
print(number)
break
#Method to check if number is prime
def is_prime(n):
if n == 2 or n == 3: return True
if n < 2 or n%2 == 0: return False
if n < 9: return True
if n%3 == 0: return False
r = int(n**0.5)
f = 5
while f <= r:
if n%f == 0: return False
if n%(f+2) == 0: return False
f +=6
return True
最终解决方案:谢谢大家的帮助。这比我预期的更有帮助。
#Method to check if number is prime
def is_prime(n):
if n == 2 or n == 3: return True
if n < 2 or n%2 == 0: return False
if n < 9: return True
if n%3 == 0: return False
r = int(n**0.5)
f = 5
while f <= r:
if n%f == 0: return False
if n%(f+2) == 0: return False
f +=6
return True
#Checking for numbers that are palindromes and prime
for number in range(1000,3,-1):
if str(number) == str(number)[::-1] and is_prime(number):
print(number)
break
您的代码存在几个问题:
- 第一个版本,你的
while
循环逻辑是落后的
- 第二个版本,你的缩进错了。
number+=1
是上面 if
块的一部分,而 print
不是 while
循环的一部分。
while
循环末尾的打印打印了错误的值,因为它在此时已退出循环以进行测试 while number < maxNumber:
。
尝试:
for n in xrange(1000):
if str(n)==str(n)[::-1] and is_prime(n):
print n
您可以轻松将其变成 while
循环:
n=0
while n<1000:
if str(n)==str(n)[::-1] and is_prime(n):
print n
n+=1
我建议将素数测试与回文测试分开。由于与测试一个数字是否为素数(对于较大的数字)相比,测试一个字符串是否为回文要快得多,因此首先测试回文。
有一个函数可以检测一个数是否为素数 here。
根据您的评论,我现在看到您正在寻找最大值而不是所有的回文素数。
要得到最大的素数回文,你可以从最大值向后退一步。由于您不知道该最大值是否为质数或偶数,因此您需要按 -1 步进(或编写一些混淆概念的额外代码):
for number in range(1000,3,-1):
if str(number) == str(number)[::-1] and is_prime(number):
print(number)
break
您只需使用 next
和一个生成器就可以制作 'Pythonic':
>>> next(n for n in range(1000,3,-1) if str(n)==str(n)[::-1] and is_prime(n))
929
或者,将 max
与素数列表一起使用(效率较低,因为您必须全部生成它们):
>>> max(n for n in range(1000) if str(n)==str(n)[::-1] and is_prime(n))
929
我正在尝试创建一个程序,输出比回文最高且小于 1000 的素数。预期输出应为 929
尝试 1
number = 1
prime = 1
maxNumber = 1000
while number > maxNumber:
if str(number) == str(number)[::-1]: #Inverts the string
for number in range(number,maxNumber): #Increments number until 1000
for i in range(2, number): #Checks current number and divides all lower
if number % i == 0:
break
else:
prime = number
print(prime)
尝试 2
number = 3
prime = 3
maxNumber = 1000
while number < maxNumber:
if str(number) == str(number)[::-1]: #Inverts the string
for i in range(2, number):
if number % i == 0:
break
else:
prime = number
number+=1
print(prime)
尝试 3,我按照建议将两个函数分开以减少处理时间
for number in xrange(1000):
if str(number) == str(number)[::-1]: and is_prime(number):
prime = number
print(number)
#Method to find prime numbers
def is_prime(n):
if n == 2 or n == 3:
return True
elif n < 2 or n%2 == 0:
return False
elif n < 9:
return True
elif n%3 == 0:
return False
r = int(n**0.5)
f = 5
while f <= r:
if n%f == 0:
return False
if n%(f+2) == 0:
return False
f +=6
return True
尝试 4:收到错误 [名称 'is_prime' 未定义]
for number in range(1000,3,-1):
if str(number) == str(number)[::-1] and is_prime(number):
print(number)
break
#Method to check if number is prime
def is_prime(n):
if n == 2 or n == 3: return True
if n < 2 or n%2 == 0: return False
if n < 9: return True
if n%3 == 0: return False
r = int(n**0.5)
f = 5
while f <= r:
if n%f == 0: return False
if n%(f+2) == 0: return False
f +=6
return True
最终解决方案:谢谢大家的帮助。这比我预期的更有帮助。
#Method to check if number is prime
def is_prime(n):
if n == 2 or n == 3: return True
if n < 2 or n%2 == 0: return False
if n < 9: return True
if n%3 == 0: return False
r = int(n**0.5)
f = 5
while f <= r:
if n%f == 0: return False
if n%(f+2) == 0: return False
f +=6
return True
#Checking for numbers that are palindromes and prime
for number in range(1000,3,-1):
if str(number) == str(number)[::-1] and is_prime(number):
print(number)
break
您的代码存在几个问题:
- 第一个版本,你的
while
循环逻辑是落后的 - 第二个版本,你的缩进错了。
number+=1
是上面if
块的一部分,而print
不是while
循环的一部分。 while
循环末尾的打印打印了错误的值,因为它在此时已退出循环以进行测试while number < maxNumber:
。
尝试:
for n in xrange(1000):
if str(n)==str(n)[::-1] and is_prime(n):
print n
您可以轻松将其变成 while
循环:
n=0
while n<1000:
if str(n)==str(n)[::-1] and is_prime(n):
print n
n+=1
我建议将素数测试与回文测试分开。由于与测试一个数字是否为素数(对于较大的数字)相比,测试一个字符串是否为回文要快得多,因此首先测试回文。
有一个函数可以检测一个数是否为素数 here。
根据您的评论,我现在看到您正在寻找最大值而不是所有的回文素数。
要得到最大的素数回文,你可以从最大值向后退一步。由于您不知道该最大值是否为质数或偶数,因此您需要按 -1 步进(或编写一些混淆概念的额外代码):
for number in range(1000,3,-1):
if str(number) == str(number)[::-1] and is_prime(number):
print(number)
break
您只需使用 next
和一个生成器就可以制作 'Pythonic':
>>> next(n for n in range(1000,3,-1) if str(n)==str(n)[::-1] and is_prime(n))
929
或者,将 max
与素数列表一起使用(效率较低,因为您必须全部生成它们):
>>> max(n for n in range(1000) if str(n)==str(n)[::-1] and is_prime(n))
929