본문 바로가기
카테고리 없음

[Algorithm] N까지의 수열에서 N과 서로소 개수 구하기

by 호메로스 2024. 5. 22.

오일러 피 함수란?

-  양의 정수 N에 대해서, N보다 작거나 같은 양의 정수 중에서  N과 서로소인 정수의 개수를 나타낸다. 보통 𝜙(𝑛) 또는 𝜑(𝑛)로 표기한다.

 

- 즉, 1부터 N까지 범위에서 N과 서로소인 자연수의 개수를 뜻한다.

 

*오일러 피 함수는 증명을 통해서 완벽하게 알 수 있지만 여기서는 코딩테스트를 위한 내용만 다루려 한다.

 

에라토스테네스의 체

오일러 피 함수의 원리는 에라토스테네스의 체와 비슷하다.

원리

1. 구하고자 하는 오일러 피의 범위만큼 배열을 자기 자신의 인덱스값으로 초기화한다.

 

2. 2부터 시작해 현재 배열의 값과 인덱스가 같으면(= 소수일 때) 현재 선택된 숫자(K)의 배수에 해당하는 수를 배열에 끝까지 탐색하며 P[i] = P[i] - P[i]/K 연산을 수행한다. (i는 K의 배수)

 

3.배열의 끝까지 2번을 반복해서 오일러 피 함수를 완성한다.

 

EX) 1부터 15까지 수열에서 15와 서로소인 수 찾기


1. 2에 대해서 P[i] = P[i] - P[i]/K 연산을 수행한다. 여기서 K는 2이다.

 


2. 다음으로 3으로 이동해 3의 배수에 해당하는 값에 대해서도 P[i] = P[i] - P[i]/K 연산을 수행한다. 연산 후 결과는 밑과 같다. (k=3)

예를 들어서

P[6]은 3이었으므로 P[6] = 3 - (3/3) =  2 가 된다.

P[9] = 9 - (9/3) = 6 이 된다.


3. 배열이 끝날 때까지 반복한다.

여기서 각 인덱스에 해당하는 값들은 인덱스 값과 서로소인 인덱스 값 이하의 수의 개수를 말한다.

즉,  𝜙(8) = 4(1, 3, 5, 7) 이고 𝜙(11)=10(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)이다.   

 

결론적으로 P[i] = P[i] - P[i]/K 의 과정은 N의 약수의 배수를 N 이하의 수들에 대해서 제거하는 과정이다.

 

2의 배수로 인한 탈락 - > 𝜙(6) = 6 - (6/2) = 3(1, 3, 5)

3의 배수로 인한 탈락 - > 𝜙(6) = 3 - (3/3) = 2(1, 5)

 

 

 

 

 

 

 

 

 

 

 

 

*Do it! 알고리즘 코딩테스트 책 참고*