1. μ€μΌλ¬ νΌ ν¨μλ?
$$
φ(n) = nμ΄ν\;μμ°μ\;μ€\;nκ³Ό\;μλ‘μμΈ\;μμ\;κ°μ
$$
$φ(12) \; = \; 4$μ΄λ€.
2. μ¬μ νμ΅
μ€μΌλ¬ νΌ ν¨μμ μ¦λͺ
μ μν΄μ λ€μ μ±ν°μμ μ€μΌλ¬μ κ³± 곡μ
μ μ΄ν΄λ³Ό κ²μΈλ°, μ¬μ μ νμ΅ν΄μΌν λ΄μ©μ΄ μμ΄μ 미리 μκ°νκ² λ€.
- 1οΈβ£
μμΈμ
: μμμ μ Kμ μμμ΄λ©΄μ μΈμμΈ μμ΄λ€. μλ₯Ό λ€λ©΄ 12μ μμΈμλ 2μ 3 μ΄ μλ€. - 2οΈβ£
μμΈμ λΆν΄
: μμμ μ Kλ₯Ό μμλ‘λ§ μΈμ λΆν΄νλ κ²μ΄λ€. μλ₯Ό λ€μ΄ 12λ₯Ό μμΈμ λΆν΄νλ©΄, $12\,=\,2^{2}\,*\,3$μ΄λ€. - 3οΈβ£
μλ‘μ
: Aμ Bκ° μλ‘μλΌλ λ»μ, Aμ Bμ 곡μ½μκ° 1λ§κ³ λ μλ€λ λ»μ΄λ€. - 4οΈβ£ $φ()$: μ€μΌλ¬ νμ΄λΌκ³ μ½λλ€.
- 5οΈβ£ $\prod_{p \mid N}$: μ¬λ¬ κ°μ ν©μ λνλ΄λ ∑ μ²λΌ μ¬λ¬ κ°μ κ³±μ μ λνλ΄λ μνκΈ°νΈ μ΄λ€.
3. μ€μΌλ¬μ κ³± 곡μ
(1) μ μ
$$
\phi(N) = N \times \prod_{p \mid N} \left( 1 - \frac{1}{p} \right)
$$
(2) ν΄μ€
μ€μΌλ¬μ κ³± 곡μ
μ μ리λ 1λΆν° NκΉμ§μ μ«μ μ€ μμΈμμ κ·Έ λ°°μλ₯Ό μ μΈ
μμΌμ κ²°κ΅ μμλ§ μμμμ λ¨κ² νλ κ²μ΄λ€. κ·Έλ¦¬κ³ κ·Έ μλ₯Ό μΌλ€.
μμμ λνλΈ pλ Nμ μμΈμλ₯Ό λ»νλ€. ν΄λΉ μμ΄ νμ΄λ‘ λ¬Άμ¬ μμΌλ―λ‘ pμλ Nμ μμΈμκ° μ°¨λ‘λλ‘ λ€μ΄κ° κ²μ΄λ€. μ΄μ νλμ© λλ¦΄λ§ ν΄λ³΄μ.
β Nμ΄νμ μμ°μ μ€ pμ λ°°μμ κ°μλ λͺ κ°μΌκΉ?
κ·Έκ²μ Nμ Pλ‘ λλ λͺ«κ³Ό κ°μ κ²μ΄λ€. μλ₯Ό λ€μ΄ 1μ΄μ 12 μ΄νμμ 2μ λ°°μμ κ°μλ 6μ΄λ€. 3μ λ°°μλ 4κ°μΌ κ²μ΄λ€. λ°λΌμ μ΄λ₯Ό λ³μνν΄μ λνλΈλ€λ©΄, $\frac{N}{p} (λ΄λ¦Ό)$ λ‘ λνλΌ μ μλ€.
β λΉμ¨ν ν΄μ λνλ΄κΈ°
ν΄λΉ 곡μμμλ κ³μ°νκΈ° μ½κ² Nκ° μ€μμ μμΈμμ λ°°μκ° μλ μμ λΉμ¨ μ ꡬνκ³ κ±°κΈ°μ Nμ κ³±ν΄ μ΅μ’
μ μΌλ‘ N μ΄ν Nκ³Ό μλ‘μμΈ λ°°μλ₯Ό ꡬνλ€.
Nμ΄ν μμ°μ μ€ μμΈμ pμ λ°°μκ° μλ μμ λΉμ¨ μ νννλ©΄ $1 - \frac{1}{p}$μ κ°μ κ²μ΄λ€. μ΄λ₯Ό μμΈν μ€λͺ
νλ©΄ μ°λ¦¬κ° ꡬνλ €λ κ²μ
$$
λΉμ¨\;=\;\frac{Pμ\;λ°°μκ°\;μλ\;μ«μμ\;κ°μ}{μ 체\;μ«μμ\;κ°μ}
$$
μ¦,
$$
λΉμ¨ = \frac{N - \frac{N}{P}}{N}
$$
λΆλͺ¨λ₯Ό μ 리νλ©΄
$$
λΉμ¨ = 1 - \frac{1}{P}
$$
κ° λλ€.
μ΄μ νλμ $1 - \frac{1}{p}$μ λ»μ μκ² λ€. νμ§λ§ 곡μμ 보λ νμ΄ κΈ°νΈλ‘ λͺ¨λ μμΈμκ° μλ μμ λΉμ¨μ κ³±νκ³ μλ€. μ΄κ±΄ μ κ·Έλ΄κΉ?
β μμΈμμ λ°°μκ° μλ μμ λΉμ¨μ μ λΆ κ³±νλ μ΄μ
μ΄λ ν¬ν¨ λ°°μ μ μ리 λλ¬Έμ΄λ€. 2μ λ°°μμ 3μ λ°°μλ₯Ό μ§μ°λ©΄μ 6μ λ°°μκ° 2λ² μ§μμ‘λ€. ν¬ν¨ λ°°μ μ μ리λ μ§ν©μκ°μ λ°°μ μν
λ°, κΈ°μ΅ μ λλ λΆμ΄ λ§μν
λ λ€μ κΈ°λ‘νκ³ κ°κ² λ€.
$$
β£A∪B∪Cβ£=β£Aβ£+β£Bβ£+β£Cβ£−β£A∩Bβ£−β£B∩Cβ£−β£C∩Aβ£+β£A∩B∩Cβ£
$$
μ¦ λλ² μ€λ³΅ν΄μ λΉΌμ§ κ°μ ν λ² λν΄μ, κ³μ°μ μ¬λ°λ₯΄κ² μ μ§νλ κ²μ΄λ€. μ΄ ν¬ν¨ λ°°μ μ μ리λ κ³±μ
곡μμ μμ°μ€λ½κ² λ
Ήμ μλ€.
μμ 곡μ λλ‘, $φ(12)$λ₯Ό ꡬν΄λ³ΌκΉ?
$$
Ο(12)=12×(1− \frac{1}{2})×(1− \frac{1}{3})
$$
μ¬κΈ°μ κ³± 곡μμ κ³μ°ν΄λ³΄λ©΄
$$
12×(1 - \frac{1}{2} - \frac{1}{3} + \frac{1}{6})
$$
μ΄λ€. μ΄λ₯Ό κΈλ‘ νμ΄λ³΄λ©΄,
$$
12×(100\% - 2μ\,λ°°μμ\,λΉμ¨ - 3μ\,λ°°μμ\,λΉμ¨ + 6μ\,λ°°μμ\,λΉμ¨)
$$
μ΄λ€. μμ°μ€λ½κ² ν¬ν¨ λ°°μ μ μ리 κ° λ€μ΄κ° μλ€. λ°λΌμ νμ΄λ₯Ό μ¨μ λͺ¨λ λΉμ¨μ κ³±ν΄μΌ νλ€.
μκ²°
μ΄λ κ² λͺ¨λ μμΈμκ° μλ μμ λΉμ¨μ κ³±νλ©΄ (μ¦ νμ΄κΈ°νΈκΉμ§λ§ κ³μ°νλ©΄) N μ΄νμ μ μ€ Nκ³Ό μλ‘μμΈ μμ λΉμ¨μ΄ λλ€. μ¬κΈ°μ μ 체 κ°μμΈ Nμ κ³±νμ¬ μλ‘μμ κ°μλ₯Ό ꡬνλ©΄ λλ κ²μ΄λ€.
μ΄μ μ€μΌλ¬νΌ ν¨μμ μ리λ₯Ό μμλ΄€μΌλ μ΄λ₯Ό JAVAλ‘ κ΅¬νν΄λ³΄κ² λ€.
4. JAVAλ‘ κ΅¬ννλ λ²
(1) μ리
μμμ ꡬν μ€μΌλ¬ νΌ ν¨μ(φ(n))λ νλμ Nμ λν΄μ κ·Έκ²κ³Ό μλ‘μμΈ μμ κ°μλ₯Ό ꡬνλ€. μ°λ¦¬κ° ν κ²μ 1λΆν° NκΉμ§ μμ°μ κ°κ°μ φ(k)μ κ°μ ꡬν κ²μ΄λ€.
μ΄λ₯Ό μν΄μ μλΌν μ€ν
λ€μ€μ 체λ₯Ό νμ©νλ€. μλΌν μ€ν
λ€μ€μ 체μμ μμμ λ°°μλ₯Ό μμ νμ λ°°μ΄μμ false
λ‘ λ°κΎΈλ κ²μ μμμ λ°°μκ° iμ΄λ©΄ arr[i] = arr[i] - arr[i]/P (Pλ μμ, iλ μμμ λ°°μ)
λ‘ λ°κΎΈμ΄μ£Όλ©΄ λλ€.
μ΄κ² μ κ°λ₯ν κΉ? arr[i] = arr[i] - arr[i]/P1
λ $N×(1-\frac{1}{P_1})$λ₯Ό νμ΄ μ΄ κ²κ³Ό κ°λ€. μ¬κΈ°μ λ§μ½ μμ $P_2$λ iλ₯Ό λ°°μλ‘ κ°μ§λ€λ©΄ arr[i] = arr[i] - arr[i]/P2
κ³μ°μ νλ² λ ν κ²μ΄λ€. μ΄λ $N×(1-\frac{1}{P_1})$ μ΄λ κ³μ°μ΄ λλ κ³³μ, $(1-\frac{1}{P_2})$λ₯Ό νλ² λ κ³±νλ κ²μ΄λ€. μ¦ κ° λ°°μ΄μ μμλ§λ€
$$
\phi(N) = N \times \prod_{p \mid N} \left( 1 - \frac{1}{p} \right)
$$
κ³μ°μ ν΄μ£Όλ κ²μ΄ λλ€.
(2) SUDO CODE
- 0οΈβ£ μ΄λκΉμ§ μλ‘μμ κ°μ μ°Ύμ κ±΄μ§ N μ λ ₯ λ°κΈ°
- 1οΈβ£ μλΌν μ€ν λ€μ€μ 체 ꡬνν΄μ Nκ°μ μμ λ΄μ μμ μ°ΎκΈ° β μλ νλ―μ΄ μμ νμ λ°°μ΄ λ§λ€κΈ°
- 2οΈβ£ μ€μΌλ¬μ νΌ μν
- 2-1) 1λ²μμ μμ±ν μμ νμ λ°°μ΄ μ‘°ν
- 2-2) μμμ μμ pλ₯Ό λ§λλ©΄ ν΄λΉ μμμ λ°°μλ€(μ΄ν k)μ λνμ¬ euler_arr[k] = euler[k] - euler_arr[k]/p ν΄μ£ΌκΈ°
(3) JAVA CODE
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
static int N;
static boolean [] is_prime;
static int [] euler_arr;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
is_prime = new boolean [N + 1];
prime_sieve(N);
euler_phi_f(N);
System.out.println(Arrays.toString(euler_arr));
}
public static void prime_sieve(int n){
Arrays.fill(is_prime, true);
for (int i = 2; i <= Math.sqrt(n); i++) {
if(is_prime[i]){
for (int j = i*i; j <= n; j*=i) {
is_prime[j] = false;
}
}
}
}
public static void euler_phi_f(int n){
euler_arr = new int[n + 1];
for (int i = 1; i <= N; i++) {
euler_arr[i] = i;
}
for (int i = 2; i <= N; i++) {
if(is_prime[i]){
for (int j = i; j <= N; j+=i) {
euler_arr[j] = euler_arr[j] - euler_arr[j]/i;
}
}
System.out.println("μμ: "+i + "λ°°μ΄ μν©: " + Arrays.toString(euler_arr));
}
}
}
λ§€λ² μμλ₯Ό νμ©ν΄ μ€μΌλ¬μ νΌ μ μ© λ°°μ΄μ λ λλ§λ€ μ½μμ μ°λλ‘ νμΌλ, ν μ€ μ© νμΈνλ©° μ΄ν΄νκΈΈ λ°λλ€.