https://www.acmicpc.net/problem/4948
내 풀이:
1
2
3
4
5
6
7
8
9
10
11
12
|
n=int(input())
while n!=0:
arr = [False, False] + [True] * (2*n-1)
for i in range(2, int((2*n+1)**0.5+1)):
if arr[i]:
for j in range(i * 2, len(arr), i):
arr[j] = False
result=0
for k in range(n+1,2*n+1):
result+=arr[k]
print(result)
n = int(input())
|
2672ms
나름 최적화하여 문제를 풀기 위해 while문으로 각 경우에 따른 최소의 소수범위를 구했는데 이때문에 샘플 문제가 많이질수록, 또 샘플 문제가 필요로 하는 소수 범위가 클수록 시간이 기하급수적으로 커진다.
asm9677님 풀이:
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 GetPrime(n):
if n < 2:
return []
n += 1
save = [1] * (n // 2)
for i in range(3, int(n ** 0.5) + 1, 2):
if save[i // 2]:
k = i * i
save[k // 2::i] = [0] * ((n - k - 1) // (2 * i) + 1)
return [2] + [(2 * i + 1) for i in range(1, n // 2) if save[i]]
def Search(prime, n):
l,r = 0, len(prime)-1
while l<=r:
m=(l+r)//2
if prime[m] > n:
r = m-1
else:
l = m+1
return l
prime = GetPrime(123456*2)
while True:
n=int(input())
if n==0:
break
print(Search(prime, n*2) - Search(prime, n))
|
파이썬으로 풀어보는 백준 11729번: 하노이 탑 이동 순서 (0) | 2020.01.10 |
---|---|
파이썬으로 풀어보는 백준 2447번: 별 찍기 - 10 (0) | 2020.01.09 |
파이썬으로 풀어보는 백준 2581번: 소수 (0) | 2020.01.08 |
백준 1011번: Fly me to the Alpha Centauri (0) | 2020.01.06 |
파이썬으로 풀어보는 백준 4673번: 셀프 넘버 (0) | 2020.01.04 |
댓글 영역