若2个数a,b, GCD(a,b) == 1 ,那么 a^φ(b) ≡ 1 (mod b)

欧拉函数性质

(1) p^k型欧拉函数:

若N是质数p(即N=p), φ(n)= φ§=p-p(k-1)=p-1。若N是质数p的k次幂(即N=pk),φ(n)=pk-p(k-1)=(p-1)p^(k-1)。

(2)mn型欧拉函数设n为正整数,以φ(n)表示不超过n且与n互素的正整数的个数,称为n的欧拉函数值。若m,n互质,φ(mn)=(m-1)(n-1)=φ(m)φ(n)。

(3)若n为奇数时,φ(2n)=φ(n)。对于任何两个互质 的正整数a,n(n>2)有:a^φ(n)=1 mod n (恒等于)此公式即 欧拉定理当n=p 且 a与素数p互质(即:gcd(a,p)=1)则上式有: a^(p-1)=1 mod n (恒等于)此公式即 费马小定理

欧拉公式的延伸:一个数的所有质因子之和是euler(n)*n/2。

附上欧拉函数代码:

import java.util.Scanner;

public class 欧拉函数 {
static int n;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
System.out.println(euler_one());
}
//求单个欧拉函数的值
static int euler_one() {
int ans = n;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
ans = ans / i * (i - 1);
}
while (n % i == 0) {
n /= i;
}
}
//表明 i * i <= n的数已经不满足了
if (n > 1) {
ans = ans / n * (n - 1);
}
return ans;
}
//求 【1,n】这个区间的欧拉函数
static int[] phi = new int[10000];
static void euler_interval() {
//初始化 所有数的欧拉值等于自身
for (int i = 1; i <= n; i++) {
phi[i] = i;
}
//进行筛选
for (int i = 2; i <= n; i++) {
if (phi[i] == i) { //将这个数的倍数 都 乘以 (1 - 1/pi)
for (int j = i; j <= n; j += i) {
phi[j] = phi[j] / i * (i - 1);
}
}
}
}
}