티스토리 뷰

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
29
30
31
32
33
34
35
36
37
38
import math
def isPrime(n):
    count=0
    for i in range(2,(int)(math.sqrt(n))+1):
        if(n%i==0):
            return False
    return True
number=1
sum=0
count_sosoo=0
for i in range(1,1000000000):
    all=i*4-3
    arr=[]
    count=((i*2-1)-1)*4
    if(count==0):
        count=1
    for j in range(0,count):
        arr.append(number)
        number=number+1
    matrix=i*2-1
    if(matrix==1):
        continue
    index1=matrix-2
    index2=index1+matrix-1
    index3=index2+matrix-1
    index4=index3+matrix-1
    if(isPrime(arr[index1])):
        count_sosoo=count_sosoo+1
    if(isPrime(arr[index2])):
        count_sosoo=count_sosoo+1
    if(isPrime(arr[index3])):
        count_sosoo=count_sosoo+1
    if(isPrime(arr[index4])):
        count_sosoo=count_sosoo+1
    if(count_sosoo/all<0.1):
        print(matrix)
        break
#반환 시간 : 154.8s
cs



이전에 이것과 비슷한 문제가 있어서 참고했는데 알고리즘 자체로는 거의 동일했다.


하지만 생각보다 경우가 많이 나왔고


계속 행렬 형태로 만들다 보니 에러가 떠서 계산에 사용한 부분은 remove() 시켜주었고


이렇게 메모리 에러를 해결할 수 있었다.



하지만 시간이 정말 많이 걸렸다.



ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ


remove와 append가 필요 없게 코드를 다시 짜고 소수 판별 함수를 조금 손봤더니


90초를 줄일 수 있었다.


여전히 오래 걸린다.

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

프로젝트 오일러 55번  (0) 2017.07.10
프로젝트 오일러 57번  (0) 2017.07.08
프로젝트 오일러 45번  (0) 2017.07.08
프로젝트 오일러 47번  (0) 2017.07.08
프로젝트 오일러 52번  (0) 2017.07.08
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
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 29 30 31
글 보관함