基础算法--欧拉函数

欧拉函数(Euler’s totient function),也称为费马函数,是一个与正整数相关的数论函数,用符号 φ(n) 表示。欧拉函数 φ(n) 定义为小于或等于 n 的正整数中与 n 互质的数的个数。

具体而言,对于给定的正整数 n,欧拉函数 φ(n) 计算满足以下条件的 k 的个数: 1 ≤ k ≤ n,且 k 与 n 互质(即 k 和 n 的最大公约数为 1)。

如φ(10) = 4,其中{1、3、7、9 }与10互质。

欧拉函数计算公式如下:
ϕ ( n ) = n ⋅ ( 1 − 1 p 1 ) ⋅ ( 1 − 1 p 2 ) ⋅ … ⋅ ( 1 − 1 p k ) \phi(n) = n \cdot \left(1 - \frac{1}{p_1}\right) \cdot \left(1 - \frac{1}{p_2}\right) \cdot \ldots \cdot \left(1 - \frac{1}{p_k}\right) ϕ(n)=n(1p11)(1p21)(1pk1)
其中 p1, p2, …, pk 是n不同的质因数。(注意,是质因数,不是质数)有想了解质因数的同学可以看我这篇文章:分解质因数

例如,对于正整数 n = 10,我们来计算欧拉函数 φ(10)。首先,我们需要将 n 分解为质因数的乘积形式。
10 可以分解为:
2 × 5 , 2 \times 5, 2×5
这意味着 10 的质因数为 2 和 5,它们都是不同的质数。
因此可以计算欧拉函数 φ(10) 如下:
ϕ ( 10 ) = 10 ⋅ ( 1 − 1 2 ) ⋅ ( 1 − 1 5 ) = 4 \phi(10) = 10 \cdot \left(1 - \frac{1}{2}\right) \cdot \left(1 - \frac{1}{5}\right) = 4 ϕ(10)=10(121)(151)=4
所以,φ(10) = 4,表示小于或等于 10 的正整数中与 10 互质的数的个数为 4。

可以借助最大公因数实现欧拉函数:

public class Main {
    public static int gcd(int a, int b) {
        if (b == 0) {
            return a;
        } else {
            return gcd(b, a % b);
        }
    }

    public static int eulerTotientFunction(int n) {
        int count = 0;
        for (int i = 1; i <= n; i++) {
            if (gcd(n, i) == 1) {
                count++;
            }
        }
        return count;
    }

    public static void main(String[] args) {
        int n = 10;
        int result = eulerTotientFunction(n);
        System.out.println("欧拉函数 φ(" + n + ") = " + result);
    }
}
  • 36
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值