Haribo ML, AI, MATH, Algorithm

소수 찾기

2021-01-18
Haribo

소수 찾기

코드

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)의 개수를 반환하는 함수입니다.

  1. a = set() : 숫자의 조합을 저장할 집합 a를 초기화합니다.
  2. for i in range(len(n)): : 문자열 n의 각 문자에 대해 반복합니다.
  3. a |= set(map(int, map("".join, permutations(list(n), i + 1)))) : 문자열 n의 길이가 i + 1인 모든 순열(permutation)을 생성하고, 이를 문자열로 결합한 후 정수로 변환하여 집합 a에 추가합니다.
  4. a -= set(range(0, 2)) : 0과 1은 소수가 아니므로 집합 a에서 제거합니다.
  5. for i in range(2, int(max(a) ** 0.5) + 1): : 2부터 a의 최대값의 제곱근까지 반복하며 소수가 아닌 숫자를 제거합니다.
  6. a -= set(range(i * 2, max(a) + 1, i)) : 에라토스테네스의 체를 사용하여, i의 배수를 모두 제거하여 소수가 아닌 숫자를 필터링합니다.
  7. return len(a) : 소수의 개수를 반환합니다.

Similar Posts

이전 포스트 삼각 달팽이

다음 포스트 스킬 트리

Comments