본문 바로가기

오일러프로젝트

[오일러프로젝트] 42번문제 n번째 삼각수는 tn = ½ n (n + 1) 이라는 식으로 구할 수 있는데, 처음 10개는 아래와 같습니다. 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ... 어떤 영어 단어에 대해서, 각 철자의 알파벳 순서(A=1, B=2, ..., Z=26)를 모두 더한 값을 '단어값'이라 부르기로 합니다. 예를 들어 'SKY'의 단어값은 19 + 11 + 25 = 55가 되는데, 이것은 우연히도 t10과 같습니다. 이렇게 어떤 단어의 단어값이 삼각수일 경우에는 이 단어를 '삼각단어'라 부르기로 합니다. 약 16KB의 텍스트 파일 words.txt에는 2000개 정도의 영어 단어가 수록되어 있습니다. 이 중에서 삼각단어는 모두 몇 개입니까? 회사에서 점심먹고 잠시..파이썬으로만 풀었다.. 삼.. 더보기
[오일러프로젝트] 41번문제 1부터 n까지의 숫자를 하나씩만 써서 만든 n자리 숫자를 팬디지털(pandigital)이라고 부릅니다. 2143은 4자리 팬디지털인데, 이 수는 동시에 소수이기도 합니다. n자리 팬디지털 소수 중에서 가장 큰 수는 무엇입니까? 가장 심플한 방식은 1 ~ 987654321까지 loop를 돌면서 소수인지 판정하는 것인데 이게 시간이 어마어마하게 걸린다... 그래서 일단 123은 제끼고 1234 ~ 123456789의 팬디지털 숫자를 모두 구한 후 이것을 소수인지 판별하며 가장 큰 것을 찾았음.. Python Ruby Perl 그런데 팬디지털 수를 만들어 List로 저장하는 로직들이 마음에 안든다.. 더 좋은 방법들이 있을 것 같은데...으.. 더보기
[오일러프로젝트] 40번문제 소수점 뒤에 양의 정수를 차례대로 붙여 나가면 아래와 같은 무리수를 만들 수 있습니다. 0.123456789101112131415161718192021... 이 무리수의 소수점 아래 12번째 자리에는 1이 옵니다 (위에서 붉게 표시된 숫자). 소수점 아래 n번째 숫자를 dn이라고 했을 때, 아래 식의 값은 얼마입니까? d1 × d10 × d100 × d1000 × d10000 × d100000 × d1000000 일단.. 무리수라는건 신경쓰지 않고 단순히 숫자를 string으로 붙여나가서면서 원하는 index를 찾아서 계산하였다. 답변 스레드를보니 자리수에 해당하는 수를 가져오는 공식도 있는듯 하다. 처음에는 그냥 0~ 1000000 (index를 맞춰주기 위해서 0부터 돌림)까지 돌려보았는데 pytho.. 더보기
[오일러프로젝트] 39번문제 세 변의 길이가 모두 자연수 {a, b, c}인 직각삼각형의 둘레를 p 로 둘 때, p = 120 을 만족하는 직각삼각형은 아래와 같이 세 개가 있습니다. {20, 48, 52}, {24, 45, 51}, {30, 40, 50}1000 이하의 둘레 p에 대해서, 직각삼각형이 가장 많이 만들어지는 p의 값은 얼마입니까? 평범한 문제. 직각 삼각형 나오면 일단 피타고라스의 정리.. 다만, a,b,c사이의 관계에 따라서 조건을 좀 더 줄여 줄 수 있을 것 같지만 그냥 각각 1~1000까지 loop돌면서 모든 case에 대해 brute-force 로직 적용. Python Ruby Perl 더보기
[오일러프로젝트] 38번문제 숫자 192에 1, 2, 3을 각각 곱합니다. 192 × 1 = 192 192 × 2 = 384 192 × 3 = 576곱한 결과를 모두 이어보면 192384576 이고, 이것은 1 ~ 9 팬디지털(pandigital)인 숫자입니다. 이런 과정을 편의상 '곱해서 이어붙이기'라고 부르기로 합니다. 같은 식으로 9와 (1, 2, 3, 4, 5)를 곱해서 이어붙이면 918273645 라는 1 ~ 9 팬디지털 숫자를 얻습니다. 어떤 정수와 (1, 2, ... , n)을 곱해서 이어붙였을 때 얻을 수 있는 가장 큰 아홉자리의 1 ~ 9 팬디지털 숫자는 무엇입니까? (단 n > 1) 일단... 맨 앞자리는 9로 시작해야 가장 클 것이라서 (예로 918273654가 나왔기 때문에 최소한 이거보다 크거나 같겠지..) .. 더보기
[오일러프로젝트] 37번문제 소수 3797에는 왼쪽부터 자리수를 하나씩 없애거나 (3797, 797, 97, 7) 오른쪽부터 없애도 (3797, 379, 37, 3) 모두 소수가 되는 성질이 있습니다. 이런 성질을 가진 소수는 단 11개만이 존재합니다. 이것을 모두 찾아서 합을 구하세요. (참고: 2, 3, 5, 7은 제외합니다) 특별한 내용은 없는 문제 2,3,5,10등을 이용하여 loop 조건을 더 타이트하게 주었으면 좀 더 빨리 끝났을듯.. Ruby Perl 더보기
[오일러프로젝트] 36번문제 대칭수(palindrome)인 585는 2진수로 나타내도 10010010012가 되어 여전히 대칭수입니다. 10진법과 2진법으로 모두 대칭수인 1,000,000 이하 숫자의 합을 구하세요. (주의: 첫번째 자리가 0이면 대칭수가 아님) 특별히 어려울 것이 없었음.. Python Ruby Perl 더보기
[오일러프로젝트] 35번문제 소수 중에서 각 자리의 숫자들을 순환시켜도 여전히 소수인 것을 circular prime이라고 합니다. 예를 들어 197은 971, 719가 모두 소수이므로 여기에 해당합니다. 이런 소수는 100 밑으로 2, 3, 5, 7, 11, 13, 17, 31, 37, 71, 73, 79, 97 처럼 13개가 있습니다. 그러면 1,000,000 밑으로는 모두 몇 개나 있을까요? 처음에는 순열을 생각하고 순열을 생성했는데 답이 틀려서 문제를 좀 더 자세히 읽어보니 shift인것... 파이썬과 루비는 pop 메서드가 지원되어서 그걸 사용하였고 펄은 pop과 함께 unshift를 사용하여 순환수를 생성하였음... 펄에서 join 메서드 파라메터 잘못써서 디버깅에 몇 시간 투자한건..뭐..--; 내가 이거 때문에 어제 .. 더보기
[오일러프로젝트] 34번문제 숫자 145에는 신기한 성질이 있습니다. 각 자릿수의 팩토리얼(계승)을 더하면 1! + 4! + 5! = 1 + 24 + 120 = 145 처럼 자기 자신이 됩니다. 이렇게 각 자릿수의 팩토리얼을 더하면 자기 자신이 되는 모든 수의 합을 구하세요. 단, 1! = 1 과 2! = 2 의 경우는 덧셈이 아니므로 제외합니다. 한글 오일러프로젝트 사이트 css가 깨지는듯..--? 대략 9!의 결과를 보고 자리수를 산정해서 상한선을 정함.. Python Ruby Perl 더보기
[오일러프로젝트] 33번문제 분수 49/98에는 재미있는 성질이 있습니다. 수학을 잘 모르는 사람이 분모와 분자에서 9를 각각 지워서 간단히 하려고 49/98 = 4/8 처럼 계산해도 올바른 결과가 됩니다. 이에 비해 30/50 = 3/5 같은 경우는 다소 진부한 예라고 볼 수 있습니다. 위와 같은 성질을 가지면서 '진부하지 않은' 분수는, 값이 1보다 작고 분자와 분모가 2자리 정수인 경우 모두 4개가 있습니다. 이 4개의 분수를 곱해서 약분했을 때 분모는 얼마입니까? i를 지울 수 있는 수로 봤을 때 10n+i / 10i+d = n/d로 표현 가능하고.. 예제의 49/98 같은 경우 n=4, i=9, d=8로 표현되며.. 이를 식으로 변환하면 9nd = 10in - di가 나옵니다. 이 조건을 만족하는 n,d를 찾아서 원래 분모.. 더보기