숫자 n이 있다고 가정합니다. n이 2면체 소수인지 여부를 확인해야 합니다. 그 숫자가 그 자체가 소수이고 디스플레이의 방향(정상 또는 거꾸로)에 관계없이 7-세그먼트 디스플레이를 사용하여 동일한 숫자 또는 다른 소수를 표시할 때 숫자를 2면체 소수라고 합니다.
따라서 입력이 n =1181과 같으면 출력은 True
가 됩니다.
두 번째 것은 첫 번째 것의 거꾸로 된 형식이며 둘 다 소수입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- 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