a,b 의 범위가 동일하게 2부터 5까지의 정수로 주어졌을때, "a의 b거듭제곱"을 모두 나열해 보면,
2², 2³, 2⁴, 2⁵
3², 3³, 3⁴, 3⁵
4², 4³, 4⁴, 4⁵
5², 5³, 5⁴, 5⁵
모두16개의 숫자가 나오고, 2⁴ 과 4² 은 동일한 값이기 때문에, 숫자는 총 15개 입이고, 이것을 Distinct Powers라고 하네요.
Distinct powers
Consider all integer combinations of aᵇ for 2 ≤ a ≤ 5 and 2 ≤ b ≤ 5:
2²=4, 2³=8, 2⁴=16, 2⁵=32
3²=9, 3³=27, 3⁴=81, 3⁵=243
4²=16, 4³=64, 4⁴=256, 4⁵=1024
5²=25, 5³=125, 5⁴=625, 5⁵=3125
If they are then placed in numerical order, with any repeats removed, we get the following sequence of 15 distinct terms:
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 aᵇ for 2 ≤ a ≤ 100 and 2 ≤ b ≤ 100?
같은 방법으로 2부터 100까지의 정수범위에서, 서로의 거듭제곱수를 계산하면, 총 몇개의 다른 숫자가 나오는가 하는것이 문제입니다.
루프문을 두개를 중첩시키고, 각각의 제곱을 해서, List에다 하나씩 append를 시키면 될것 같네요.
mylist=[] for a in range(2,6): for b in range(2,6): value=pow(a,b) print(value,end=',') mylist.append(value) print() print(len(mylist))
4,8,16,32, 9,27,81,243, 16,64,256,1024, 25,125,625,3125, 16
위의 결과에서 16은 중복이기 때문에, 조건문을 하나 달아줘야 겠네요. 그리고 범위 range(2,6) 을 2부터 100까지인 range(2,101)로 바꿔주면 됩니다.
mylist=[] for a in range(2,101): print(a,end=',') for b in range(2,101): value=pow(a,b) if mylist.count(value) ==0: mylist.append(value) print() print("answer:",len(mylist))
2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100, answer: 9183