Max Prime Palindrome in Python

I am trying to create a program that displays the highest prime number than a palindrome and less than 1000. The expected result should be 929

Attempt 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)

Attempt 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)

Attempt 3, I followed suggestions to separate the two functions to reduce processing time

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   

Attempt 4: getting error [name 'is_prime' 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  

Final Solution: Thank you all for your help. It was more helpful than I ever expected.

#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
+4
source share
1 answer

There are several problems in the code:

  • The first version, your logic for the loop is the whileopposite.
  • , . number+=1 if , print while.
  • while , while number < maxNumber:.

Try:

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    

. , ( ) .

.


, , max .

, . , , , , -1 ( , ):

for number in range(1000,3,-1):
    if str(number) == str(number)[::-1] and is_prime(number):      
        print(number)  
        break  

"Pythonic", next :

>>> 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
+2

Source: https://habr.com/ru/post/1583789/


All Articles