python - Python 中的最大素数回文

标签 python for-loop primes 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:收到错误 [name 'is_prime' is not defined]

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

最佳答案

您的代码有几个问题:

  1. 第一个版本,您对 while 的逻辑循环是落后的
  2. 第二个版本,你的缩进是错误的。 number+=1if 的一部分上面的 block 和 print不是 while 的一部分环形。
  3. 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

关于python - Python 中的最大素数回文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29774964/

相关文章:

python - 如何重新格式化 Pandas 数据框中的日期数据

c - 质数生成算法

用于 VBA 加载项文件的 Python 构建脚本

python - urllib 和 urllib2 返回 "IOError: [Errno socket error] [Errno -2] Name or service not known"但 Firefox 下载文件没有问题

python - 如何在 for 循环结束时执行命令?

r - 使用 for 循环创建互差矩阵

javascript - continue 在嵌套的 for 循环中做了什么?

javascript - Javascript 中不打印素数

C:在各种条件下检查素数

python array_walk() 替代方案