You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于素数p的欧拉函数φ(p^k)=p^k-p^{k-1}证明中,区间[1,p^k)内p的倍数数量的疑问

关于素数p的欧拉函数φ(pk)=pk-p{k-1}证明中,区间[1,pk)内p的倍数数量的疑问

嘿,我来帮你理清这个困惑!你现在的问题出在重复计数上啦,咱们一步一步来拆解。

首先,你把p的倍数按p的不同幂次分组,比如p的倍数、p²的倍数……但这些组是有包含关系的:所有p²的倍数本身已经是p的倍数了,p³的倍数也是p的倍数和p²的倍数,以此类推。你把这些组的数量直接相加,相当于把同一个数(比如p²)算了好几次,这就导致结果错啦。

那正确的计算方式应该是什么样的呢?其实很简单:一个数是p的倍数,当且仅当它可以写成m = p * t,其中t是正整数。咱们分两种情况看:

  • 如果证明里用的是闭区间[1, pk]:此时m可以取到p*p{k-1}=pk,t的取值范围是1到p{k-1},总共有p^{k-1}个,这就和证明里的结论完全对应。
  • 如果是你写的左闭右开区间[1, pk):m最大只能到p*(p{k-1}-1)=p^k - p,t的取值范围是1到p{k-1}-1,总共有p{k-1}-1个。

而欧拉函数φ(pk)的定义是**小于等于pk且与pk互质的正整数的个数**,所以大部分证明会用闭区间[1,pk]来计算:总共有pk个数,减去其中p的倍数的数量p{k-1},剩下的就是和pk互质的数,也就是φ(pk)=p^k - p^{k-1},逻辑一下子就通顺了。

给你举个小例子验证下:比如p=2,k=3,pk=8。区间[1,8]里2的倍数是2、4、6、8,一共4个,刚好等于p{k-1}=2²=4,完全符合结论。

如果想用更通用的方法计算区间内p的倍数数量,直接用“区间内p的倍数个数= floor(区间最大值 / p)”就好,既简单又不会出错~

备注:内容来源于stack exchange,提问作者tonythestark

火山引擎 最新活动