파이썬으로 수학문제 풀기- 프로젝트 오일러(project euler, 22번부터)

프로젝트 오일러 29번 - Distinct powers

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

 

 

 

댓글

댓글 본문