无心人 发表于 2009-1-31 08:46:20

平方数问题一则

假设完全平方数$a$的十进制表示的各位数字和是$b$
如果$b$也是完全平方数,我们称$a$是二重平方数
如果$b$也是二重平方数,则我们称$a$是三重平方数
依次类推

现在请求出$10^24$内的所有二重平方数

无心人 发表于 2009-1-31 14:26:11

:)

看来别人么兴趣做啊

无心人 发表于 2009-1-31 14:33:11

代码
let square = , let s = a * a]
let isSquare = listArray (1, 256) , let s = (/= []) \$ findIndices (==a) square]
let digitsSumn = sum \$ zipWith (*) \$ map (flip (-) 1) \$ map length \$ group \$ sort \$ (show n) ++ "0123456789"
let test n m = [(i, s, ss) | i <- , let s = i * i, let ss = digitsSum s, isSquare!(toInteger ss)]
得到10^12内的结果并保存
writeFile "Result.Txt" \$ show \$ test 1 1000000

无心人 发表于 2009-1-31 14:37:56

呵呵
10^12内
耗时几秒

共160264组解
解的数量太多了

kofeffect 发表于 2009-1-31 22:02:36

使用Haskell算的啊
耗时多少?

确实太多了
你只求10^12内的而已
Clear;
k = 1;
For[i = 1, i < 10^12 + 1, i++,
a = i^2;
(*二重平方数*)
len = IntegerLength;
s = 0;
b = a;
For[j = len, j > 0, j--,
   s += IntegerPart;
   a = Mod;
   ];
t = IntegerPart];
If,
   PutAppend; k += 1;];
] // Timing
Print["No.", k]

无心人 发表于 2009-1-31 22:05:00

:)

多谢提醒, 当时有点糊涂了
呵呵, 年纪大了,人一过10岁就有点迷糊了
呵呵

kofeffect 发表于 2009-1-31 22:06:19

不是吧,我刚回复,你就看到贴了,难道你也一直刷新帖子啊:lol

无心人 发表于 2009-1-31 22:06:36

这个东西有优化算法
在那个平方数字和帖子上的代码可以修改来做

大概不会很长时间就能得到10^24内的

无心人 发表于 2009-1-31 22:07:05

Haskell代码是用最笨的算法写的

kofeffect 发表于 2009-1-31 22:09:58

呵呵
我现在还看不懂Haskell
只会mathematica穷举
页: [1] 2 3
查看完整版本: 平方数问题一则