주어진 수 n을 k진수로 변환한 뒤, 0P0/0P/P0/P와 같은 케이스에 따라 소수의 전체 개수를 구하는 문제이다. 이 케이스는 따로 분류할 필요 없이 k진법으로 변환한 수를 0을 기준으로 split한 각 수가 소수인지 아닌지를 확인하면 된다. 10진수 n을 k진법으로 변환하는 convert 함수 및 주어진 수가 소수인지 아닌지를 검사하는 is_prime은 기억하고 있자.
1. n을 k로 나눈 몫과 나머지를 구한다.
2. 나머지를 이어서 붙여준다. n은 k로 나눈 몫이 된다.
3. n이 0 이하가 되면 멈춘다.
4. result를 거꾸로 반환한다.
1. 2부터 num의 제곱근까지 수 i를 num에 나눈 나머지가 0이 아닌지 검사한다.
2. 도중 0이 나온다면 소수가 아니므로 False를 return한다.
3. 모두 0이 아니라면 소수이므로 True를 return한다.
4. 주어진 수 num은 2 이상이어야 하므로 1 여부를 사전에 커버한다.
def convert(n, k):
result = ''
while n > 0:
n, mod = divmod(n, k)
result += str(mod)
return result[::-1]
def is_prime(num):
if num == 1: return False
for i in range(2, int(num**0.5)+1):
if num % i == 0: return False
return True
def solution (n, k):
k_ary= convert(n, k)
total = 0
for num in k_ary.split('0'):
if num.isdigit():
if is_prime(int(num)):
total += 1
return total