#11689 GCD(n,k) = 1
난이도 : 골드 1
유형 : 정수론 / Euler's phi function(오일러 파이 함수)
▸ 문제
자연수 n이 주어졌을 때, GCD(n, k) = 1을 만족하는 자연수 1 ≤ k ≤ n 의 개수를 구하는 프로그램을 작성하시오.
▸ 입력
첫째 줄에 자연수 n (1 ≤ n ≤ 1012)이 주어진다
▸ 출력
GCD(n, k) = 1을 만족하는 자연수 1 ≤ k ≤ n 의 개수를 출력한다.
문제 풀이
오일러 파이 함수 (Euler's phi function) 문제이다. ϕ(n)은 n보다 작으면서 n과 서로소(k)인 개수이다.
오일러 함수 성질
오일러 곱셈적 함수
ϕ(mn) = ϕ(m)*ϕ(n)가 성립된다. 증명 참고
오일러 파이 함수계산
p가 소수일 때 ϕ(p^a)의 계산법은 다음과 같다. p가 소수라면, p^a와 서로소가 아닌 수들은 반드시 p를 인수로 가져야 한다. 1부터 p^ka 지의 수 중 이런 수들은 p^a/p = p^a-1개가 있다. 따라서 다음 공식이 성립된다.
풀이 코드
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
long n = Long.parseLong(br.readLine());
long pi = n;
for(long i=2; i*i<=n; i++) {
if(n%i==0) {
pi = pi/i*(i-1);
}
while(n%i==0) {
n/=i;
}
}
if(n!=1) {
pi = pi/n*(n-1);
}
System.out.println(pi);
}
}
'Dot Algo∙ DS > PS' 카테고리의 다른 글
[BOJ] 백준 1188번 음식 평론가 (Java) (0) | 2022.02.12 |
---|---|
[BOJ] 백준 2436번 공약수 (Java) (0) | 2022.02.11 |
[BOJ] 백준 2023번 신기한 소수 (Java) (0) | 2022.02.09 |
[BOJ] 백준 1016번 제곱 ㄴㄴ수 (Java) (0) | 2022.02.08 |
[BOJ] 백준 2014번 소수의 곱 (Java) (0) | 2022.02.07 |