def isprime(n):
if n == 1:
return False
elif n == 2:
return True
j = [False, False, True]+[True]*(n-2) #0번째=0
for i in range(2,n):
if j[i]:
for k in range(i*2,n+1,i):
j[k]=False
if j[-1] == False:
return False
return True
def solution(n, k):
answer = 0
n_str = ''
while n:
n_str += str(n%k)
n//=k
n_str = n_str[::-1]
n_str = n_str.split('0')
for i in n_str:
if i != '' and isprime(int(i)):
answer += 1
return answer
처음엔 이렇게 작성했다. 평소엔 바로 n에 대해 소수인지 판별하는 함수를 구현하는 방식을 애용(?)했는데 이번 문제는 뭔가 아닐 것 같다는 생각에..ㅎㅎ; 에라토스테네스의 체로 구현했는데 1번과 11번에서 런타임 에러가 발생했다.
그래서 기존의 방식대로 각 숫자에 대해 소수인지를 판별하는 함수로 재구현했고, 통과됐다.
import math
def isprime(n):
if n == 1:
return False
elif n == 2:
return True
m = math.ceil(n**(1/2))
for i in range(2,m+1):
if n%i==0:
return False
return True
def solution(n, k):
answer = 0
n_str = ''
while n:
n_str += str(n%k)
n//=k
n_str = n_str[::-1]
n_str = n_str.split('0')
for i in n_str:
if i != '' and isprime(int(i)):
answer += 1
return answer