天天看點

【python】---- 查找兩個數之間的【可逆素數】

1. 問題背景

輸入正整數m,n,查找[m,n]區間的可逆素數。

可逆素數:可逆素數是指該數本身是一個素數,并且把該數倒過來也是一個素數。

例如:

1009是一個素數,把它倒過來9001也是一個素數,是以我們就說1009是一個可逆素數(同理9001也是一個可逆素數)。

2. 判斷是不是素數

1. 方法一:

最簡單的方法,依次除以【從2到數字本身(不包括本身)】,不存在餘數是0的數,就是素數;

思路清晰,但是效率低,比如:
  1. 假如 n 是合數,必然存在非1的兩個約數 p1 和 p2 ,其中p1<= math.sqrt(n),p2>= math.sqrt(n)。
  2. 能被4整除的,肯定能被2整除;能被6整除的肯定能被3整除!
def isPrime(num):
  num = int(num)
  if (num <= 3):
    return num > 1
  for i in range(2,num):
    if(num % i == 0):
      return False
  return True           

複制

2. 方法二:

去掉 math.sqrt(n)以後的數。

import math
def isPrime(num):
  num = int(num)
  if (num <= 3):
    return num > 1
  sqrt = int(math.sqrt(num)) + 1
  for i in range(2,sqrt):
    if(num % i == 0):
      return False
  return True           

複制

3. 方法三:參考百度素數計算

去掉能被2,3,5整除的數。

import math
def isPrime(num):
  num = int(num)
  if (num <= 3):
    return num > 1
  elif(num % 2 == 0 or num % 3 == 0):
    return False
  elif(num % 6 != 1 and num % 6 != 5):
    return False
  sqrt = int(math.sqrt(num)) + 1
  for i in range(5,sqrt,6):
    if(num % i == 0 or num % (i + 2) == 0):
      return False
  return True           

複制

3. 判斷是不是可逆素數

def isReversiblePrime(num):
  num = str(num)
  nums = list(num)
  nums.reverse()
  onum = ''.join(nums)
  if(isPrime(num) and isPrime(onum)):
    return True
  else:
    False           

複制

4. 完整代碼

import math
def isPrime(num):
  num = int(num)
  if (num <= 3):
    return num > 1
  elif(num % 2 == 0 or num % 3 == 0):
    return False
  elif(num % 6 != 1 and num % 6 != 5):
    return False
  sqrt = int(math.sqrt(num)) + 1
  for i in range(5,sqrt,6):
    if(num % i == 0 or num % (i + 2) == 0):
      return False
  return True

def isReversiblePrime(num):
  num = str(num)
  nums = list(num)
  nums.reverse()
  onum = ''.join(nums)
  if(isPrime(num) and isPrime(onum)):
    return True
  else:
    False

if __name__ == "__main__":
  m = int(input('請輸入查找【可逆素數】的開始數:'))
  n = int(input('請輸入查找【可逆素數】的結束數:'))
  if(m < n):
    for i in range(m,n):
      if(isReversiblePrime(i)):
        print(i)           

複制

5. 預覽

【python】---- 查找兩個數之間的【可逆素數】