题解 | #完全数计算#由一次错误 的回答推导欧拉公式

完全数计算

http://www.nowcoder.com/practice/7299c12e6abb437c87ad3e712383ff84

alt alt

本来是遍历到根号n,后来想改进到再去除2的倍数 alt

验证 6因子 1,6 2,3

那么12因子 (1,12 2,6) (2,6 4,3) 这样因子和是3倍

但是12因子 1,12 2,6 3,4 那么2,6重复了

结论错误

为什么? 猜测可能是因为6是2的倍数所以会再翻倍时导致因子有重复

a不是2的倍数

a因子 1,a x1,y1 x2,y2

2a因子 (1,2a 2,a) (x1,2y1 and 2x1,y1)...

2a因子和是a的3倍,但是没什么用因为得不到4a因子和是2a三倍

顺着欧拉思路是不是需要a为质数 alt

所以对素数p 2np=(p+1)(2n+11)2^n*p 的因子和= (p+1)(2^{n+1}-1)

2np2^n*p是完全数=> 2np=(p+1)(2n+11)2np2^n*p= (p+1)(2^{n+1}-1)-2^n*p

(2n+1)p=(p+1)(2n+11)(2^{n+1})*p= (p+1)(2^{n+1}-1)

a/b a整除b (a,b)=1 a,b最大公约数为1,ab互质

p+1/(2n+1)p,(p,p+1)=1p+1/(2^{n+1})*p,且 (p,p+1)=1 =>

p+1/2n+1p+1/2^{n+1} *****

p=2kt(t<2k1)2n+1=>2kt+1=>t=1=>p=2k1设 p= 2^k-t(t<2^{k-1})显然2^{n+1}没有奇因子=>2^k-t+1 没有奇因子=>t=1=>p= 2^k-1

=> (2n+1)(2k1)=(2k)(2n+11)(2^{n+1})*(2^k-1)=(2^k)(2^{n+1}-1)

=>n=k-1结合2np2^n*p 是完全数

k2k1=p2np有存在k 当2^k-1=p 为质数时 2^n*p为完全数

(2k1)(2k1)也即 (2^k-1)*(2^{k-1})为完全数

对比欧拉结论

p2p1,2p1)2(p1)便如果p是质数,且2^p-1也是质数,(2^p-1)*2^{(p-1)}便是一个完全数。

2p1,p下证若要2^p-1也是质数,p需为质数

alt

全部评论
这个故事告诉我们当程序员的数学功底强的时候可以省多少事情……
2 回复 分享
发布于 2022-05-25 12:18
原来有点懵的看完直接云里雾里
点赞 回复 分享
发布于 2022-02-12 16:31

相关推荐

三年之期已到我的offer快到碗里来:9硕都比不上9本
点赞 评论 收藏
分享
点赞 评论 收藏
分享
2 2 评论
分享
牛客网
牛客企业服务