欧拉计划776:数位和除数

[复制链接]
查看11 | 回复7 | 2012-5-21 10:19:41 | 显示全部楼层 |阅读模式


2021-12-13_152734.png (17.08 KB, 下载次数: 8)
下载附件
2021-12-13 15:29 上传

保留12位有效数字

回复

使用道具 举报

千问 | 2012-5-21 10:19:41 | 显示全部楼层
def d(n):
return sum(map(lambda x

int)(x),str(n)))
def F(N):
return sum(map(lambda n:float(n)/d(n),range(1,N+1)))

F(123)
F(12345)
回复

使用道具 举报

千问 | 2012-5-21 10:19:41 | 显示全部楼层
分母逐个递增,遇到0就会变少
>>> [(n,d(n)) for n in range(1,100)]
[(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 1), (11, 2), (12, 3), (13, 4), (14, 5), (15, 6), (16, 7), (17, 8), (18,
9), (19, 10), (20, 2), (21, 3), (22, 4), (23, 5), (24, 6), (25, 7), (26, 8), (27, 9), (28, 10), (29, 11), (30, 3), (31, 4), (32, 5), (33, 6), (34, 7),
(35, 8), (36, 9), (37, 10), (38, 11), (39, 12), (40, 4), (41, 5), (42, 6), (43, 7), (44, 8), (45, 9), (46, 10), (47, 11), (48, 12), (49, 13), (50, 5)
, (51, 6), (52, 7), (53, 8), (54, 9), (55, 10), (56, 11), (57, 12), (58, 13), (59, 14), (60, 6), (61, 7), (62, 8),
回复

使用道具 举报

千问 | 2012-5-21 10:19:41 | 显示全部楼层
把分母聚类
>>> sorted([(n,d(n)) for n in range(1,100)],key=lambda s: s[-1])
[(1, 1), (10, 1), (2, 2), (11, 2), (20, 2), (3, 3), (12, 3), (21, 3), (30, 3), (4, 4), (13, 4), (22, 4), (31, 4), (40, 4), (5, 5), (14, 5), (23, 5), (
32, 5), (41, 5), (50, 5), (6, 6), (15, 6), (24, 6), (33, 6), (42, 6), (51, 6), (60, 6), (7, 7), (16, 7), (25, 7), (34, 7), (43, 7), (52, 7), (61, 7),
(70, 7), (8, 8), (17, 8), (26, 8), (35, 8), (44, 8), (53, 8), (62, 8), (71, 8), (80, 8), (9, 9), (18, 9), (27, 9), (36, 9), (45, 9), (54, 9), (63, 9),
(72, 9), (81, 9), (90, 9), (19, 10), (28, 10), (37, 10), (46, 10), (55, 10)
回复

使用道具 举报

千问 | 2012-5-21 10:19:41 | 显示全部楼层
同样位数的分子以9为步长递增,遇到10的倍数就停止
>>> sorted([(n,d(n)) for n in range(1,1000)],key=lambda s: s[-1])
[(1, 1), (10, 1), (100, 1), (2, 2), (11, 2), (20, 2), (**, 2), (110, 2), (200, 2), (3, 3), (12, 3), (21, 3), (30, 3), (102, 3), (111, 3), (120, 3), (
201, 3), (210, 3), (300, 3), (4, 4), (13, 4), (22, 4), (31, 4), (40, 4), (103, 4), (112, 4), (121, 4), (130, 4), (202, 4), (211, 4), (220, 4), (301, 4
), (310, 4), (400, 4), (5, 5), (14, 5), (23, 5), (32, 5), (41, 5), (50, 5), (104, 5), (113, 5), (122, 5), (131, 5), (140, 5), (203, 5), (212, 5), (221
, 5), (230, 5), (302, 5), (311, 5), (320, 5), (401, 5), (410, 5), (500, 5), (6, 6), (15, 6), (24, 6), (33, 6), (42, 6), (51, 6), (60, 6), (105, 6), (1
14, 6), (123, 6), (132, 6), (141, 6), (150, 6), (204, 6), (213, 6), (222, 6), (231, 6), (240, 6), (303, 6), (312, 6), (321, 6), (330, 6), (402, 6), (4
11, 6), (420, 6), (501, 6), (510, 6), (600, 6), (7, 7), (16, 7), (25, 7), (34, 7), (43, 7), (52, 7), (61, 7), (70, 7), (106, 7), (115, 7), (124, 7), (
133, 7), (142, 7), (151, 7), (160, 7), (205, 7), (214, 7), (223, 7), (232, 7), (241, 7), (250, 7), (304, 7), (313, 7), (322, 7), (331, 7), (340, 7), (
403, 7), (412, 7), (421, 7), (430, 7), (502, 7), (511, 7), (520, 7), (601, 7), (610, 7), (700, 7), (8, 8), (17, 8), (26, 8), (35, 8), (44, 8), (53, 8)
回复

使用道具 举报

千问 | 2012-5-21 10:19:41 | 显示全部楼层
数据更多点,看出来步长是9 90 900 ....
>>> sorted([(n,d(n)) for n in range(1,10000)],key=lambda s: s[-1])[1:100]
[(10, 1), (100, 1), (1000, 1), (2, 2), (11, 2), (20, 2), (**, 2), (110, 2), (200, 2), (1001, 2), (**0, 2), (1100, 2), (2000, 2), (3, 3), (12, 3), (2
1, 3), (30, 3), (102, 3), (111, 3), (120, 3), (201, 3), (210, 3), (300, 3), (1002, 3), (**1, 3), (1020, 3), (1**, 3), (1110, 3), (1200, 3), (2001, 3
), (2010, 3), (2100, 3), (3000, 3), (4, 4), (13, 4), (22, 4), (31, 4), (40, 4), (103, 4), (112, 4), (121, 4), (130, 4), (202, 4), (211, 4), (220, 4),
(301, 4), (310, 4), (400, 4), (1003, 4), (**2, 4), (1021, 4), (1030, 4), (1102, 4), (1111, 4), (1120, 4), (1201, 4), (1210, 4), (1300, 4), (2002, 4),
(2011, 4), (2020, 4), (2**, 4), (2110, 4), (2200, 4), (3001, 4), (3010, 4), (3100, 4), (4000, 4), (5, 5), (14, 5), (23, 5), (32, 5), (41, 5), (50, 5
), (104, 5), (113, 5), (122, 5), (131, 5), (140, 5), (203, 5), (212, 5), (221, 5), (230, 5), (302, 5), (311, 5), (320, 5), (401, 5), (410, 5), (500, 5
), (1004, 5), (**3, 5), (1022, 5), (1031, 5), (1040, 5), (1103, 5), (1112, 5), (1121, 5), (1130, 5), (1202, 5)]
回复

使用道具 举报

千问 | 2012-5-21 10:19:41 | 显示全部楼层
把列表分组了
>>> h=sorted([(n,d(n)) for n in range(1,10000)],key=lambda s: s[-1])
>>> for i,j in itertools.groupby(h, key=lambda x:x[1])

rint (i,list(map(lambda x:x[0],list(j))))
...
1 [1, 10, 100, 1000]
2 [2, 11, 20, **, 110, 200, 1001, **0, 1100, 2000]
3 [3, 12, 21, 30, 102, 111, 120, 201, 210, 300, 1002, **1, 1020, 1**, 1110, 1200, 2001, 2010, 2100, 3000]
4 [4, 13, 22, 31, 40, 103, 112, 121, 130, 202, 211, 220, 301, 310, 400, 1003, **2, 1021, 1030, 1102, 1111, 1120, 1201, 1210, 1300, 2002, 2011, 2020,
2**, 2110, 2200, 3001, 3010, 3100, 4000]
5 [5, 14, 23, 32, 41, 50, 104, 113, 122, 131, 140, 203, 212, 221, 230, 302, 311, 320, 401, 410, 500, 1004, **3, 1022, 1031, 1040, 1103, 1112, 1121, 1
130, 1202, 1211, 1220, 1301, 1310, 1400, 2003, 2012, 2021, 2030, 2102, 2111, 2120, 2201, 2210, 2300, 3002, 3011, 3020, 3**, 3110, 3200, 4001, 4010, 4
100, 5000]
6 [6, 15, 24, 33, 42, 51, 60, 105, 114, 123, 132, 141, 150, 204, 213, 222, 231, 240, 303, 312, 321, 330, 402, 411, 420, 501, 510, 600, 1005, **4, 102
3, 1032, 1041, 1050, 1104, 1113, 1122, 1131, 1140, 1203, 1212, 1221, 1230, 1302, 1311, 1320, 1401, 1410, 1500, 2004, 2013, 2022, 2031, 2040, 2103, 211
2, 2121, 2130, 2202, 2211, 2220, 2301, 2310, 2400, 3003, 3012, 3021, 3030, 3102, 3111, 3120, 3201, 3210, 3300, 4002, 4011, 4020, 4**, 4110, 4200, 500
1, 5010, 5100, 6000]
回复

使用道具 举报

千问 | 2012-5-21 10:19:41 | 显示全部楼层
还是求和更直观
>>> for i,j in itertools.groupby(h, key=lambda x:x[1])

rint (i,sum(map(lambda x:x[0],list(j))))
...
1 1111
2 5555
3 16665
4 38885
5 77770
6 139986
7 233310
8 366630
9 549945
10 783255
11 1063227
12 1383195
13 1733160
14 2099790
15 2466420
16 2813052
17 3116355
18 3349665
19 3482985
20 3516315
21 3452988
22 3299670
23 3066360
24 2766390
25 2416425
26 2036463
27 1649835
28 1283205
29 966570
30 699930
31 482174
32 311080
33 183315
34 94435
35 38885
36 9999
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行