Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 N이 2면체 소수인지 확인

<시간/>

숫자 n이 있다고 가정합니다. n이 2면체 소수인지 여부를 확인해야 합니다. 그 숫자가 그 자체가 소수이고 디스플레이의 방향(정상 또는 거꾸로)에 관계없이 7-세그먼트 디스플레이를 사용하여 동일한 숫자 또는 다른 소수를 표시할 때 숫자를 2면체 소수라고 합니다.

따라서 입력이 n =1181과 같으면 출력은 True

가 됩니다.

Python에서 N이 2면체 소수인지 확인

두 번째 것은 첫 번째 것의 거꾸로 된 형식이며 둘 다 소수입니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • up_side_down() 함수를 정의합니다. n
  • 소요됩니다.
  • 온도 :=n, 총계 :=0
  • 온도가> 0일 때 수행
    • d :=임시 모드 10
    • d가 2와 같으면 d :=5
    • 그렇지 않으면 d가 5와 같을 때 d :=2
    • 총계 :=총계 * 10 + d
    • temp :=(temp / 10)의 몫
  • 총 수익
  • 기본 방법에서 다음을 수행합니다.
  • n이 소수가 아니거나 up_side_down(n)이 소수가 아니거나 n의 반대가 소수가 아니거나 up_side_down(n)의 반대가 소수가 아닌 경우
    • 거짓을 반환
  • 온도 :=n
  • 온도가> 0일 때 수행
    • rem :=임시 모드 10
    • rem이 [3, 4, 6, 7, 9] 중 하나인 경우
      • 거짓을 반환
    • temp :=(temp / 10)의 몫
  • 참 반환

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

예시 코드

prime = (int(1e5)+5)*[True]
def reverse(n):
   return int(str(n)[::-1])
 
def up_side_down(n):
   temp = n
   total = 0
   while temp>0:
      d = temp % 10
      if d == 2:
         d = 5
      elif d == 5:
         d = 2
      total = total * 10 + d
      temp//= 10
 
   return total
 
def get_all_prime():
   prime[0] = prime[1] = False
 
   for i in range(2, int(1e5)+1):
      j = 2
      while i * j<= int(1e5):
         prime[i * j] = False
         j+= 1
 
def solve(n):
   get_all_prime()
   if not prime[n] or not prime[up_side_down(n)] or not prime[reverse(n)] or not prime[reverse(up_side_down(n))]:
      return False
 
   temp = n
 
   while temp>0:
      rem = temp % 10;
      if rem in [3, 4, 6, 7, 9]:
         return False
      temp //= 10
 
   return True

n = 1181
print(solve(n))

입력

23, 3

출력

True