鉴于昨天探讨的数学题本人收获颇丰,今天再发一道有意思的数学题,感兴趣的快进来试试

2020-03-23 13:57:51 +08:00
 YUX

定义: d(n) 为 n 的所有除数之和(不包括 n 自身,最小为 1 ),例如:

定义: 因为 d(220) = 284, d(284) = 220 所以 220 和 284 这两个数都被称为 友好数

Question 在小于一亿的数中,共有多少个友好数


3478 次点击
所在节点    问与答
46 条回复
nomoon
2020-03-24 03:16:51 +08:00
楼主你这是在刷 project euler 么?
YUX
2020-03-24 10:28:37 +08:00
@nomoon #41 嗯
wutiantong
2020-03-24 13:36:20 +08:00
我不能认同把这个叫做数学题,作为算法题这也挺无趣的。
starqoq
2020-03-24 13:51:29 +08:00
首先用线性素数筛把所有素数都找出来,对于合数,也可以记录一个因子。
然后对于和数 d(X) = d(X/p) + p (p 是 X 的一个因子)

然后在扫一下满足 d(X)!=X && d(d(X))=X 即可
复杂度 O(n)
macg0406
2020-03-25 15:36:54 +08:00
先求 X 的所有因子之和,可以用递推方式求解,f(k) = f(m) * f(n), 如果 k = m * n,并且 m, n 互质。然后减去本身就得到了本题中的 d(x)。

time ./a.out
462
./a.out 4.06s user 0.14s system 99% cpu 4.202 total

时间复杂度不超过 O(n logn)空间复杂度是 O(n)
macg0406
2020-03-25 15:46:26 +08:00
@macg0406 贴 github 链接需要手机认证。。。
链接 base64: aHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vbWFjZzA0MDYvOGE1MzU0M2U0ZTQxNjkyZjEyMjYxMjEyM2Y2ZWNhZjc=

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/655363

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX