- 欧拉函数
介绍
欧拉函数(Euler's Totient Function)是一个在数论中非常重要的函数,通常用符号φ(n)表示。对于正整数n,欧拉函数φ(n)定义为小于等于n且与n互质的正整数的个数。
例如,当n=8时,与8互质的正整数是1, 3, 5, 7,因此φ(8) = 4。
性质:
欧拉函数有许多有用的性质,其中一些包括:
1. 若p为质数,则φ(p) = p - 1。这是因为质数p的所有小于p的正整数都与p互质。
2. 若m和n互质,则φ(mn) = φ(m)φ(n)。这是欧拉函数的乘性性质。
3. 对于任意正整数n,欧拉函数满足以下的递归关系式:若n可以分解为素数因子的乘积,则φ(n) = n(1 - 1/p1)(1 - 1/p2)...(1 - 1/pk),其中p1, p2, ..., pk是n的不同素因子。
Java实现:
- 初始化结果为n。
- 对n进行质因数分解,从2开始逐个检查可能的质因数i。
- 如果当前数能够整除n,则说明i是n的一个质因数,进入循环,不断将n除以i,直到不能整除为止,排除掉n中所有的i因数。
- 更新result,减去由i引起的不同的因子个数,即result除以i的整数部分。
- 处理剩余的质因数,如果n大于1,说明n本身就是一个质数,更新result,减去由n引起的不同的因子个数,即result除以n的整数部分。
- 返回最终计算结果。
举例
n = 15
n % 2 !=0 表明2不是n的因数
n % 3 == 0 表明3是n的因数n/3 = 5result = result - result / 3 表明小于n的质因数不是3的倍数/*由于 4 * 4大于15,因而4之后的元素要么重复,要么不是15的质因数,即i*i <= n解释:对于p * q = n 必然存在一个较大的p和一个较小的q(或者二者相等,若q*q大于n则p和q一定不是n的质数)*/
剩余较大的因数n = 5result = result - result / 5为最终结果private static long Euler(long n) {// 计算欧拉函数值long result = n; // 初始化结果为n// 对n进行质因数分解for (long i = 2; i * i <= n; i++) { // 从2开始逐个检查可能的质因数if (n % i == 0) { // 如果当前数能够整除n,即i是n的一个质因数while (n % i == 0) { // 循环直到n不能再被i整除为止,排除掉n中所有的i因数n /= i; // 不断将n除以i,直到不能整除为止}result = result - result / i; // 更新result,减去由i引起的不同的因子个数,即result除以i的整数部分}}// 处理剩余的质因数if (n > 1) { // 如果n本身就是一个质数result = result - result / n; // 更新result,减去由n引起的不同的因子个数,即result除以n的整数部分}return result; // 返回最终计算结果
}