다섯 자리 숫자인 16807은 75으로 5제곱수입니다. 또, 아홉 자리 숫자인 134217728은 89으로 9제곱수입니다.

n자리 숫자이면서 n제곱수도 되는 양의 정수는 모두 몇 개나 있습니까?



길이만 비교하면 되는거였는데..

문제를 잘못이해해서 .. 실제 값이 맞는지까지 비교하고 있었네...

숫자의 자리수는 log를 사용하면 구할 수 있다함.. 이 코드에서는 그냥 len 사용.



Python


저작자 표시 비영리 변경 금지
신고
Posted by 용식


세제곱수인 41063625 (=3453) 로 순열을 만들어보면, 그 중에서 56623104 (=3843)와 66430125 (=4053)가 또 세제곱수입니다.
실제 41063625은, 자릿수로 만든 순열 중에서 3개가 세제곱수인 가장 작은 수입니다.

그러면 자릿수로 만든 순열 중에서 5개가 세제곱수인 가장 작은 숫자는 무엇입니까?



처음에 순열이라는 단어에 혹해서
n**3인 dict를 생성하고, 각 n**3의 순열 리스트를 구해서 5개가 되는지

하나하나 찾아가는 로직으로 구현했는데 속도가 너무 떨어졌다. 생각해보니 순열이라는것이

결국은 sort하면 같은 수가 되는 애들이라..


57623의 다른 순열 23675가 있을 때 이 두 수를 정렬시키면

23567로 같은 수를 가지게 되는 것... 이것을 사용해서 n**3의 값을 정렬하여 같은 값을 갖는

애들끼리(순열) 모았음....



Python
순열=itertools라는 이 공식이 머리속에 박혀버린듯..-.-


저작자 표시 비영리 변경 금지
신고
Posted by 용식

삼각수, 사각수, 오각수 같은 다각수들은 아래의 공식으로 만들 수 있습니다.

삼각수P3,n = n(n+1)/21, 3, 6, 10, 15, ...
사각수P4,n = n21, 4, 9, 16, 25, ...
오각수P5,n = n(3n−1)/21, 5, 12, 22, 35, ...
육각수P6,n = n(2n−1)1, 6, 15, 28, 45, ...
칠각수P7,n = n(5n−3)/21, 7, 18, 34, 55, ...
팔각수P8,n = n(3n−2)1, 8, 21, 40, 65, ...

그런데 4자리 숫자 8128, 2882, 8281 (순서대로) 에는 세 가지의 재미있는 성질이 있습니다.

  1. 각 숫자들은 서로 꼬리를 물고 순환됩니다. 각 숫자의 뒤쪽 두 자리는 다음 숫자의 앞쪽 두 자리가 되는 식입니다.
  2. 각 숫자는 서로 다른 다각수인데, 여기서는 삼각수 (P3,127=8128), 사각수 (P4,91=8281), 오각수 (P5,44=2882)가 대응됩니다.
  3. 이런 성질을 갖는 4자리의 숫자 세 개는 이 숫자들이 유일합니다.

위와 같이 순환되면서 서로 다른 다각수(삼각수 ~ 팔각수)이기도 한 4자리 숫자 여섯 개의 유일한 순서쌍을 찾고, 그 합을 구하세요.



튜플을 사용해서 N각수의 N을 키로, 해당되는 번호를 리스트로 하는 map을 생성하고

이 map을 통해서 각 N각수에서의 순환수가 되는지를 판단한다.



Python
내가 푼 방식은 코드가 너무 난잡해서.. 다른 사람의 풀이된 코드를 참고 및 공부할겸 올려둠.파이썬이 참.. 유용하구나..하는생각이 절로드는 코드..ㅋ


저작자 표시 비영리 변경 금지
신고
Posted by 용식


네 개의 소수 3, 7, 109, 673은 상당히 특이한 성질이 있습니다. 넷 중에 아무것이나 두 개를 골라서 어떤 쪽으로 이어붙이던지 그 결과도 소수가 됩니다. 예를 들어 7과 109를 고르면 7109와 1097 또한 소수입니다.
3, 7, 109, 673는 이런 성질을 가진 네 소수 중에서 그 합이 792로 가장 작습니다,

다섯 소수 중에 어떤 두 개를 골라 이어붙여도 소수가 되는 수들을 찾아서, 그 합의 최소값을 구하세요.



드디어 60번문제..

처음에는 5개 소수 리스트를 하나씩 뽑아내서 순열 조합을 생성하고 (5C2)

이 조합들이 모두 소수인지 확인하는 형태로 구현했는데 2시간이 넘어도 답이 안나와 -_-;


그래서 앞쪽부터 보초를 많이 세우는 방식으로....




Python

보통 오일러프로젝트 풀면서 전체를 먼저 구해놓고 거기서 뽑아내는게 빨랐기 때문에

그 방법을 먼저 썼는데.. 그것도 case by case였네요.. 특히 brute force 방식에서는

보초를 많이 세워서 걸러주는게 가장 좋은 방법인듯 합니다..

그놈의 LOL과 디아 때문에 너무 텀이 길었네요 --;;;


저작자 표시 비영리 변경 금지
신고
Posted by 용식


숫자 1부터 시작해서 우측으로부터 시계방향으로 감아 5×5 행렬을 만들면 아래와 같이 됩니다.

21 22 23 24 25
20  7  8  9 10
19  6  1  2 11
18  5  4  3 12
17 16 15 14 13

여기서 대각선상의 숫자를 모두 더한 값은 101 입니다.

같은 방식으로 1001×1001 행렬을 만들었을 때, 대각선상의 숫자를 더하면 얼마가 됩니까?



예전에 28번문제 풀었던 풀이를 재사용...

막간을 이용한 한문제 풀이 ㅋㅋ



Python


저작자 표시 비영리 변경 금지
신고
Posted by 용식


제곱근 2는 다음과 같은 연분수의 형태로 나타낼 수 있습니다.

 2 = 1 + 1/(2 + 1/(2 + 1/(2 + ... ))) = 1.414213...

위 식을 처음부터 한 단계씩 확장해 보면 아래와 같습니다.

1 + 1/2 = 3/2 = 1.5
1 + 1/(2 + 1/2) = 7/5 = 1.4
1 + 1/(2 + 1/(2 + 1/2)) = 17/12 = 1.41666...
1 + 1/(2 + 1/(2 + 1/(2 + 1/2))) = 41/29 = 1.41379...

그 다음은 99/70, 239/169, 577/408 로 확장이 되다가, 여덟번째인 1393/985 에 이르면 처음으로 분자의 자릿수가 분모의 자릿수를 넘어섭니다.

처음부터 1천번째 단계까지 확장하는 중에, 분자의 자릿수가 분모보다 많아지는 경우는 몇 번이나 됩니까?


예제에 있는 숫자를보고

공식을 만들어봄...

근데 맞네..헐





저작자 표시 비영리 변경 금지
신고
Posted by 용식


구골(googol)은 10100을 일컫는 말로, 1 뒤에 0이 백 개나 붙는 어마어마한 수입니다.
100100은 1 뒤에 0이 2백 개가 붙으니 상상을 초월할만큼 크다 하겠습니다.
하지만 이 숫자들이 얼마나 크건간에, 각 자릿수를 모두 합하면 둘 다 겨우 1밖에 되지 않습니다.

a, b < 100 인 자연수 ab 에 대해서, 자릿수의 합이 최대인 경우 그 값은 얼마입니까?



심플한문제..

심플하게 loop.


요즘 그냥 파이썬으로만 풀고있음..;;;



Python


저작자 표시 비영리 변경 금지
신고
Posted by 용식


47이란 숫자를 골라서 뒤집은 다음 다시 원래 수에 더하면, 47 + 74 = 121 과 같이 대칭수(palindrome)가 됩니다.
물론 모든 숫자가 이토록 쉽게 대칭수를 만들어내지는 않습니다. 예를 들어 349의 경우,

349 + 943 = 1292
1292 + 2921 = 4213
4213 + 3124 = 7337

위에서 보는 것처럼 3번의 반복과정을 거쳐야 대칭수가 됩니다.

196과 같은 몇몇 숫자들은 이와 같은 과정을 아무리 반복해도 대칭수가 되지 않을 것이라고 추측되는데, 이런 수를 라이크렐 수 (Lychrel number) 라고 부릅니다. 아직 증명되지는 않았지만, 문제 풀이를 위해서 일단 라이크렐 수가 존재한다고 가정을 하겠습니다.

또한 1만 이하의 숫자들은, 50번 미만의 반복으로 대칭수가 되든지 라이크렐 수이든지 둘 중 하나라고 합니다.
1만을 넘어서면 10677에 이르렀을 때 비로소 53번의 반복으로 4668731596684224866951378664 라는 28자리의 대칭수가 만들어집니다.

그러면 1만 이하에는 몇 개의 라이크렐 수가 존재합니까?


다소 평이한 문제...


계산하면서 대칭수를 구하고 10000에서 뺐음




저작자 표시 비영리 변경 금지
신고
Posted by 용식


포커라는 카드게임은 다섯 장으로 된 패의 높고 낮음에 따라 승부를 냅니다. (포커 규칙을 이미 아는 분이라면 규칙 설명 부분은 건너뛰셔도 좋습니다)

카드 한 장은 아래와 같은 순서대로 값이 높아집니다.

2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K, A

다섯 장으로 이루어진 패의 계급(세칭 "족보")은, 낮은 것부터 높은 순서로 아래와 같습니다.

  • High Card : 가장 높은 카드의 값으로 비교.
  • One Pair : 한 쌍이 같은 카드.
  • Two Pairs : 서로 다른 두 쌍이 같은 카드.
  • Three of a Kind : 세 장이 같은 카드.
  • Straight : 모든 카드가 연속된 숫자.
  • Flush : 모든 카드의 무늬가 같음.
  • Full House : 세 장이 같고, 또 한 쌍이 같음 (Three of a Kind + One Pair).
  • Four of a Kind : 네 장이 같은 카드.
  • Straight Flush : 모든 카드가 연속된 숫자이면서 무늬도 같음.
  • Royal Flush : 10, J, Q, K, A가 무늬도 같음.

두 사람의 패가 같은 종류의 계급이라면, 계급을 구성하는 카드 중 높은 쪽을 쥔 사람이 이깁니다. 예를 들면 8 원페어는 5 원페어를 이깁니다. 
계급을 이루는 카드 숫자까지 같으면 (예: 둘 다 Q 원페어), 다른 카드를 높은 순서대로 비교해서 승부를 정합니다.

텍스트파일 poker.txt 에는 두 선수가 벌인 1,000회의 승부가 저장되어 있습니다. (우클릭해서 다운로드 받으세요)
한 줄에는 10장의 카드가 공백으로 분리되어 들어있는데, 앞의 다섯 장은 1번 선수 것이고 뒤의 다섯 장은 2번 선수의 패입니다. 잘못되거나 중복된 데이터는 없으며, 무승부도 없습니다.

카드 숫자는 2, 3, ... , 9, T, J, Q, K, A 로 (숫자 10은 T로 표시),
무늬는 C (Club - ♣), D (Diamond - ♦), H (Heart - ♥), S (Spade - ♠) 로 표시되어 있습니다.
예를 들면 3C 3D 3S 9S 9D 의 경우 3 풀하우스가 됩니다.

이 데이터를 분석하고, 1번 선수가 이긴 횟수를 구하세요.



새벽내내 이거 가지고 씨름.. 풀긴했는데 어찌 풀었나..--;

이건 루비랑 펄로 안 풀꺼임.



Python


저작자 표시 비영리 변경 금지
신고
Posted by 용식


1,2,3,4,5 다섯 숫자 중에서 세 개를 고르는 것에는 다음과 같은 10가지 경우가 있습니다.

123, 124, 125, 134, 135, 145, 234, 235, 245, 345

조합론이라는 분야에서는 이것을 5C3 = 10 이라고 표시하며, 일반적인 식은 아래와 같습니다.

nCr =
n!
r!(n−r)!
,   단 r ≤ n 이고, n! = n×(n−1)×...×3×2×1 이며 0! = 1.

이 값은 n = 23 에 이르러서야 23C10 = 1144066 으로 처음 1백만을 넘게 됩니다.

1 ≤ n ≤ 100 일때 nCr의 값이 1백만을 넘는 경우는 모두 몇 번입니까? (단, 중복된 값은 각각 계산합니다)



문제는 길지만 어렵지않은 문제..
그냥 구하면됨..



Ruby
Perl
저작자 표시 비영리 변경 금지
신고
Posted by 용식


티스토리 툴바