python中prime_Python中的Max Prime Palindrome

我正在尝试创建一个程序,输出最高素数而不是回文并且小于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循环结束时的打印输出错误的值,因为此时测试时它已退出循环,而数字< 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值