본문 바로가기
Python/알고리즘

[COS PRO 1급 #4-10] 소수의 세제곱이 몇개가 있나요

by 포푸리 (POPOOLY) 2023. 3. 4.
반응형

문제설명

자연수를 제곱한 수는 제곱수, 세 제곱한 수는 세제곱 수라고 합니다. 예를 들어 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)

댓글