티스토리 뷰

1
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
def sieve(n):
    if n < 2:
        return []
    s = [00+ [1* (n - 1)
    for i in range(2int(n**.5)+1):
        if s[i]:
            s[i*2::i] = [0* ((n - i)//i)
    return [i for i, v in enumerate(s) if v]
arr=sieve(10000)
index=168   #168 인덱스부터 1000 이상임
for i in range(index,len(arr)):
    number1=(str)(arr[i])
    number2=(str)(arr[i]+3330)
    number3=(str)(arr[i]+6660)
    if((int)(number2) in arr and (int)(number3) in arr):
        list1=[]
        list2=[]
        list3=[]
        for j in range(0,4):
            list1.append((int)(number1[j]));
            list2.append((int)(number2[j]));
            list3.append((int)(number3[j]));
        list1.sort()
        list2.sort()
        list3.sort()
        if(list1==list2 and list2==list3 and list1==list3):
           print(number1+number2+number3)
#반환 시간 : 0.02s
cs



먼저 이전에 사용했던 에라토스테네스의 체를 이용하여 10000까지의 소수를 구하고


원하는 것은 1000부터의 소수이기 때문에 미리 1000 이상이 나오는 소수 리스트의 인덱스를 구하였다.


(출처 : http://codingdojang.com/scode/503)



등차수열의 관계를 가지는 세 수를 각각 선언하고


이것들이 소수 리스트 안에 있으면


각각의 리스트에 넣어 두고 sort()를 이용해 오름차순으로 정리해 놓고


정렬된 리스트들이 서로 같으면 답이 나오게 하였다.



1000부터 9999까지의 소수 리스트에서 이러한 경우는 두 가지가 나오고


문제에서 첫 번째 경우를 예시로 들었으므로


두 번째에 나오는 경우가 답이 된다.

'Algorithm > Project Euler' 카테고리의 다른 글

프로젝트 오일러 23번  (0) 2017.07.07
프로젝트 오일러 53번  (0) 2017.07.06
프로젝트 오일러 24번  (0) 2017.07.05
프로젝트 오일러 35번  (0) 2017.07.04
프로젝트 오일러 28번  (0) 2017.07.04
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/02   »
1
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
글 보관함