欧拉函数.java 548 字节
Newer Older
qq_36480062's avatar
c  
qq_36480062 已提交
1
package 数学;
qq_36480062's avatar
c  
qq_36480062 已提交
2

qq_36480062's avatar
c  
qq_36480062 已提交
3 4 5
//https://blog.csdn.net/weixin_43237242/article/details/97388834
public class 欧拉函数 {
    public static void main(String[] args) {
qq_36480062's avatar
c  
qq_36480062 已提交
6
        System.out.println(euler(12));
qq_36480062's avatar
c  
qq_36480062 已提交
7 8 9 10
    }

    static long euler(long n) {
        long ans = n;
qq_36480062's avatar
c  
qq_36480062 已提交
11
        for (int i = 2; i <= n / i; i++) {
qq_36480062's avatar
c  
qq_36480062 已提交
12 13 14
            if (n % i == 0) {
                ans = ans / i * (i - 1);
                while (n % i == 0) {
qq_36480062's avatar
c  
qq_36480062 已提交
15
                    n /= i;
qq_36480062's avatar
c  
qq_36480062 已提交
16 17 18
                }
            }
        }
qq_36480062's avatar
c  
qq_36480062 已提交
19
        if (n > 1) ans = ans / n * (n - 1);
qq_36480062's avatar
c  
qq_36480062 已提交
20 21 22
        return ans;
    }
}