# 일반적인 소수 판별 함수
def is_prime_number(x):
# 2부터 (x-1)까지 모든 수 확인
for i in range(2, x):
#x가 해당 수로 나누어 떨어진다면
if x % i == 0:
return False #소수 아님
return True #소수 O
print(is_prime_number(4))
print(is_prime_number(7))
알고리즘 성능
# 개선된 소수판별 함수 - 2 이상의 자연수에 대하여
import math
def is_prime_number(x):
#2부터 x의 제곱근까지의
for i in range(2, int(math.sqrt(x))+1):
#x가 해당 수로 나누어 떨어진다면
if x % 1 == 0:
return False # 소수가 아님
return True #소수 O
print(is_prime_number(4))
print(is_prime_number(7))
알고리즘 성능
# 에라토스테네스의 체 알고리즘 (Python)
import math
n = 1000
# 모든 수가 소수(True)인 것으로 초기화
array = [True for i in range(n+1)]
#2부터 n의 제곱근까지의 모든 수 확인
for i in range(2, int(math.sqrt(n)) +1):
if array[i] == True : #남은 혹은 소수인 경우
#i를 제외한 i의 모든 배수 지우기
j=2
while i * j <=n:
array[i*j] = False
j+=1
#모든 소수 출력
for i in range(2, n + 1):
if array[i]:
print(i, end=' ')
n,m = 5,5
data = [1,2,3,2,5]
#순차적 접근
start, end, count = 0,0,0
sum = 0
for start in range(n):
# end를 가능한 만큼 이동시키기
while sum < m and end < n:
sum += data[end]
end += 1
# 부분합이 m일 때 카운트 증가
if sum == m:
count += 1
sum -= data[start]
print(count)
접두사 합(Prefix Sum)
: 배열의 맨 앞부터 특정 위치까지의 합을 미리 구해 놓은 것n = 5
data = [10, 20, 30, 40, 50]
# Prefix Sum 배열
sum_value = 0
prefix_sum = [0]
for i in data:
sum_value += i
prefix_sum.append(sum_value)
# 구간 합 계산
left = 3
right = 4
print(prefix_sum[right] - prefix_sum[left - 1])