코드
from itertools import chain, combinations, permutations
import math
def is_prime(x):
if x<2: return False
for i in range(2, int(math.sqrt(x))+1):
if x%i==0: return False
return True
def solution(numbers) :
total_case = set(chain.from_iterable(permutations(numbers, r) for r in range(1, len(numbers)+1)))
answer = set()
for num_tuple in total_case :
num = int(''.join(num_tuple))
if is_prime(num) :
answer.add(num)
return len(answer)
고수 코드
from itertools import permutations
def solution(input_str):
num_combinations = set()
for i in range(len(input_str)):
num_combinations |= set(map(int, map("".join, permutations(list(input_str), i + 1))))
num_combinations -= set(range(0, 2))
for i in range(2, int(max(num_combinations) ** 0.5) + 1):
num_combinations -= set(range(i * 2, max(num_combinations) + 1, i))
return len(num_combinations)
이 코드는 문자열 n
을 입력받아, 해당 문자열에서 가능한 모든 숫자의 조합을 생성한 후, 이 중 소수(prime number)의 개수를 반환하는 함수입니다.
a = set()
: 숫자의 조합을 저장할 집합a
를 초기화합니다.for i in range(len(n)):
: 문자열n
의 각 문자에 대해 반복합니다.a |= set(map(int, map("".join, permutations(list(n), i + 1))))
: 문자열n
의 길이가i + 1
인 모든 순열(permutation)을 생성하고, 이를 문자열로 결합한 후 정수로 변환하여 집합a
에 추가합니다.a -= set(range(0, 2))
: 0과 1은 소수가 아니므로 집합a
에서 제거합니다.for i in range(2, int(max(a) ** 0.5) + 1):
: 2부터a
의 최대값의 제곱근까지 반복하며 소수가 아닌 숫자를 제거합니다.a -= set(range(i * 2, max(a) + 1, i))
: 에라토스테네스의 체를 사용하여,i
의 배수를 모두 제거하여 소수가 아닌 숫자를 필터링합니다.return len(a)
: 소수의 개수를 반환합니다.