숫자만 포함하는 숫자라는 배열이 있다고 가정합니다. 주어진 자릿수에서 가능한 최소 수를 찾은 다음 생성된 수의 첫 번째와 마지막 자릿수를 취하여 숫자가 소수인지 확인해야 합니다. 숫자 자체를 인쇄한 다음 소수를 인쇄합니다.
따라서 입력이 숫자 =[5,2,1,7]과 같으면 출력은 1257이 가장 작은 숫자가 됩니다. 앞자리와 끝자리를 취한 숫자는 17과 71이며 둘 다 소수입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- digits_freq :=숫자의 빈도를 포함하는 지도
- 숫자 :=빈 문자열
- 0에서 9 사이의 i에 대해
- 0~digits_freq[i] - 1 범위의 j에 대해
- 숫자 :=숫자 연결 숫자 i
- 0~digits_freq[i] - 1 범위의 j에 대해
- num :=숫자의 첫 번째와 마지막 숫자를 취하여 숫자
- rev :=숫자의 마지막과 첫 번째 숫자를 취하여 숫자
- num이 소수이고 rev가 소수이면
- 반환 번호, num, rev
- 그렇지 않으면 num이 소수이면
- 반환 번호, 숫자
- 그렇지 않으면 rev가 소수이면
- 반환 번호, rev
- 그렇지 않으면
- 거짓을 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시 코드
컬렉션에서 가져오기 defaultdict def isPrime(num):if num> 1:for i in range(2, num):if num % i ==0:False 반환 True 반환 False def solve(arr):digits_freq =defaultdict(int) for i in range(len(arr)):Digits_freq[arr[i]] +=1 number ="" for i in range(0, 10):for j in range(digits_freq[i]):number +=str(i) num =int(number[0] + number[-1]) rev =int(number[-1] + number[0]) isPrime(num) 및 isPrime(rev):int 반환 (number), num, rev elif isPrime(num):반환 번호, num elif isPrime(rev):반환 번호, rev else:반환 False 숫자 =[5,2,1,7]print(solve(digits))사전>입력
[5,2,1,7]출력
(1257, 17, 71)