반응형
문제설명
자연수를 제곱한 수는 제곱수, 세 제곱한 수는 세제곱 수라고 합니다. 예를 들어 2^2 = 4 는 제곱수, 3^3 = 27은 세제곱수 입니다.
두 자연수 a, b가 주어질 때 a 이상 b 이하인 자연수 중 _**소수**_의 제곱수와 세제곱수의 개수를 구하려 합니다. 예를 들어 a = 6, b = 30일 때 소수의 제곱수는 [9, 25]로 2개, 소수의 세제곱수는 [8, 27]로 2개로 총 4개입니다.
두 자연수 a, b가 매개변수로 주어질 때, a 이상 b 이하인 제곱수와 세제곱수의 개수의 합을 return 하도록 solution 함수를 완성해주세요.
매개변수 설명
두 자연수 a, b가 solution 함수의 매개변수로 주어집니다.
* a, b는 각각 1 이상 1,000,000,000 이하인 자연수입니다.
* a ≤ b인 경우만 입력으로 주어집니다.
return 값 설명
a 이상 b 이하인 제곱수와 세제곱수의 개수의 합을 return 해주세요.
예시
| a | b | return |
|---|----|--------|
| 6 | 30 | 4 |
예시 설명
6 이상 30 이하인 수중 소수의 제곱수는 다음과 같습니다.
* 3^2 = 9
* 5^2 = 25
소수의 세제곱 수는 다음과 같습니다.
* 2^3 = 8
* 3^3 = 27
따라서 4를 return 하면 됩니다.
문제 코드
def solution(a, b):
# 여기에 코드를 작성해주세요.
answer = 0
return answer
풀이
def solution(a, b):
answer = []
prime = []
# 2와 b의 제곱근 사이에 소수 구하기
for i in range(2, int(b**0.5)+1):
prime.append(i)
for j in range(2, i):
if i%j == 0:
prime.remove(i)
# a와 b 사이에 있는 제곱수, 세제곱수 구하기
for num in prime:
if a <= num**2 <= b and num**2 not in answer:
answer.append(num**2)
if a <= num**3 <= b and num**3 not in answer:
answer.append(num**3)
return len(answer)
댓글