Daily Algorithm - Day 28

105·5일 전
0

Daily Algorithm

목록 보기
29/30

Distinct Powers

Consider all integer combinations of aba^b for 2a52 \le a \le 5 and 2b52 \le b \le 5:

22=4,23=8,24=16,25=3232=9,33=27,34=81,35=24342=16,43=64,44=256,45=102452=25,53=125,54=625,55=3125\begin{matrix} 2^2=4, &2^3=8, &2^4=16, &2^5=32\\ 3^2=9, &3^3=27, &3^4=81, &3^5=243\\ 4^2=16, &4^3=64, &4^4=256, &4^5=1024\\ 5^2=25, &5^3=125, &5^4=625, &5^5=3125 \end{matrix}

If they are then placed in numerical order, with any repeats removed, we get the following sequence of 1515 distinct terms:

4,8,9,16,25,27,32,64,81,125,243,256,625,1024,3125.4, 8, 9, 16, 25, 27, 32, 64, 81, 125, 243, 256, 625, 1024, 3125.

How many distinct terms are in the sequence generated by aba^b for 2a1002 \le a \le 100 and 2b1002 \le b \le 100?

2a1002 ≤ a ≤ 100 이고 2b1002 ≤ b ≤ 100a,ba, b를 가지고 만들 수 있는 aba^b 중에서 중복값을 제외한 개수를 구하는 문제이다.
내가 생각한 구현 방식은 다음과 같다.

  1. 중복 값을 제외하기 위해 set을 활용.
  2. 이중 반복문을 통해 모든 조합을 set에 추가해준다.
  3. len(set)을 통해 개수를 출력해준다.

간단하니 한번에 구현해보자.

# 2 ≤ a ≤ n, 2 ≤ b ≤ n의 범위에서 a^b의 개수를 구해주는 함수.
def distinct_powers(n):
    distinct_terms = set()
    numbers = range(2, n + 1)

    for a in numbers:
        for b in numbers:
            distinct_terms.add(a**b)
            
    return len(distinct_terms)

print(distinct_powers(100))

>>> 9183   #correct

gpt 선생님도 이 코드는 매개변수 n에 모호함과 주석의 추가만을 지적하셨다. 더 직관적으로 max_value와 같은 이름을 사용하고 해당 코드의 목적과 로직을 설명하는 주석을 추가하는 것을 권장한다고 한다.

오늘은 여기까지
-2025.01.18-

profile
focus on backend

0개의 댓글