Problem 42
주어진 텍스트 파일에 들어있는 '삼각단어'의 개수는?
def is_fun(a):
alphaList = [chr(c) for c in range(ord('A'), ord('Z')+1)]
add=0
for i in a: add+=alphaList.index(i)+1
j=0
while add>0:
j+=1
add-=j
if add==0: return 1
else: return 0
with open('./project_euler/words.txt', 'r', encoding='utf-8') as f:
data=f.read()
f.close()
words=data.replace("\"","").replace(",", " ").split()
_total=0
for i in words:
_total+=is_fun(i)
print(_total)
#tengst
#dev용식
'''
삼각수 공식으로
X=1/2n(n+1)로부터
2*X = n^2 + n이 되고.. 여기에서
2*X의 sqrt를 적용한 값으로부터 탐색을 시작 할 수 있을 것 같았습니다.
'''
Problem 43
부분열에 관련된 특이한 성질을 가진 모든 팬디지털 수의 합
### 43
import itertools
#StolenByte
Total = 0
k = [2, 3, 5, 7, 11, 13, 17]
for i in itertools.permutations("".join([str(i) for i in range(0,10)])):
p = "".join(i)
isOK = 1
for n in range(len(k)):
nn = int(p[n+1:n+4])
if nn % k[n] != 0:
isOK = 0
break
if isOK == 1:
Total += int(p)
print('Total : '+str(Total))
#StolenByte
Problem 44
합과 차도 모두 오각수인 두 오각수 차의 최솟값은?
list_ = [int(n * (3*n-1)/2) for n in range(1,10000)]
from tqdm.notebook import tqdm
_result = []
for i in tqdm(range(len(list_))):
for j in range(i+1, len(list_)):
if ((list_[i]+list_[j]) in list_) and ((list_[i]-list_[j]) in list_):
_result.append(list_[j]-list_[i])
print(_result)
Problem 45
오각수와 육각수도 되는 40755 다음으로 큰 삼각수는?
list_t = [int(n * (n+1)/2) for n in range(1,100000)]
list_p = [int(n * (3*n-1)/2) for n in range(1,100000)]
list_h = [int(n*(2*n-1)) for n in range(1,100000)]
for i in list_t:
if (i in list_p) and (i in list_h):
print(i)
Problem 46
(소수 + 2×제곱수)로 나타내지 못하는 가장 작은 홀수인 합성수는?
import math
def isGolder(num):
print(num)
for i in _list:
temp = ( num - i ) /2
if math.sqrt(temp) %1 ==0:
return True
return False
num = 3
while True:
if (isPirmiray(num) == False) and (num % 2 != 0):
if isGolder(num) == False:
print(num)
break
num += 1
에러 나는 부분의 마지막이 답이다.
Problem 47
서로 다른 네 개의 소인수를 갖는 수들이 처음으로 네 번 연속되는 경우는?
Problem 48
_list = sum([n**n for n in range(1, 1000)])
str(_list)[-10:]
Problem 49
세 항이 소수이면서 다른 수의 순열이 되는 4자리 수의 등차수열 찾기
1487, 4817, 8147은 3330씩 늘어나는 등차수열입니다. 이 수열에는 특이한 점이 두 가지 있습니다.
- 세 수는 모두 소수입니다.
- 세 수는 각각 다른 수의 자릿수를 바꿔서 만들 수 있는 순열(permutation)입니다.
1자리, 2자리, 3자리의 소수 중에서는 위와 같은 성질을 갖는 수열이 존재하지 않습니다. 하지만 4자리라면 위엣것 말고도 또 다른 수열이 존재합니다.
그 수열의 세 항을 이었을 때 만들어지는 12자리 수는 무엇입니까?
def isPermutation(i,j,z):
permutation_j = set("".join(x) for x in permutations(str(j),4))
if str(i) not in permutation_j:
return False
permutation_z = set("".join(x) for x in permutations(str(z),4))
if str(i) not in permutation_z:
return False
return True
from tqdm.notebook import tqdm
_result = []
for i in tqdm(range(len(_list))):
for j in range(i+1,len(_list)):
for z in range(j+1, len(_list)):
if (_list[z] - _list[j]) == ( _list[j] - _list[i]) and (isPermutation(_list[i],_list[j],_list[z]) ):
_result.append([str(_list[i])+str(_list[j])+str(_list[z])])
print(_result)
Problem 50
1백만 이하의 소수 중 가장 길게 연속되는 소수의 합으로 표현되는 수는?
41은 소수이면서 다음과 같은 6개의 연속된 소수의 합으로도 나타낼 수 있습니다.
41 = 2 + 3 + 5 + 7 + 11 + 13
이것은 100 이하에서는 가장 길게 연속된 소수의 합으로 이루어진 소수입니다.
1000 이하에서는 953이 연속된 소수 21개의 합으로 가장 깁니다.
1백만 이하에서는 어떤 소수가 가장 길게 연속되는 소수의 합으로 표현될 수 있습니까?
Problem 51
일부 숫자를 치환했을 때 8개의 서로 다른 소수가 생기는 가장 작은 소수?
두 자리 수 *3의 첫번째 자리를 여러가지로 바꿨을 때 가능한 아홉 가지의 결과 중에서 13, 23, 43, 53, 73, 83의 여섯 개는 소수입니다.
56**3 의 3번째와 4번째 자리를 동일한 숫자로 바꿔서 만들어지는 10개의 다섯자리 수 중에서는 아래에서 보듯이 7개가 소수가 되며, 이것은 이런 식으로 7개의 소수가 만들어지는 첫번째 경우입니다. 이 소수 집단의 첫번째 수인 56003은 이런 성질을 갖는 가장 작은 소수입니다.
56003, 56113, 56333, 56443, 56663, 56773, 56993
위의 예처럼 원래의 일부를 동일한 숫자로 치환했을 때 8개의 소수 집단이 만들어지는 경우를 찾고, 그 집단에 속한 가장 작은 소수를 구하세요.
치환하는 자리는 인접하지 않아도 되고, 가장 앞부분을 치환하는 경우 거기에 0은 올 수 없습니다.
'문제 > Project Euler(프로젝트 오일러)' 카테고리의 다른 글
Problem 52~ (0) | 2021.06.07 |
---|---|
Problem 32 ~ 41 (0) | 2021.02.26 |
Problem 22~ Problem 31 (0) | 2021.02.03 |
Problem 12 ~ Problem 21 (0) | 2021.01.19 |
Problem 1~Problem 11 (0) | 2020.08.21 |