mathe 发表于 昨天 19:12

wayne 发表于 2025-2-22 08:37
16核全开,直接上暴力美学.
第一题: $1929374254627488900 = 1389019170^2$



第一题可以挺快的,首先平方是10的倍数,这个数必然是10的倍数,末尾可以不搜索。
其次它除以10以后,平方末三位是8x9,得到这个数末三位只有24种选择。
然后它的范围在\(10^8\)到\(\sqrt{2}10^8\)之间,我们需要穷举前5位加上最后3位24种选择共41422*24种情况。

wayne 发表于 昨天 19:54

末位数能被8整除, 所以有三种情况,$809, 849,889$. 然后就是 7位数的穷举. 我是这种思路.
如果计算模1000的情况,确实是24种情况,这样又少了3个数, 于是只需要 穷举 4位数. 重新 实现了一下mathe的思路, 很快.
tmp = Select, IntegerDigits[#^2, 10, 3][[-1]] == 9 &&IntegerDigits[#^2, 10, 3][[-3]] == 8 &];
sol = Flatten[
   Table[FromDigits[
   Flatten[{1, IntegerDigits,
       IntegerDigits}]], {i, 1010, 38902}, {j, tmp}], 1];
Select[]], # == 1 &] &]

wayne 发表于 昨天 23:33

基于mathe的思路,改成计算平方的末尾是五位数的情况,即模10^5, 有240个解.这样,前面的只需要计算10-389的情况. 总共只需要枚举$389*240$种情况, 于是1秒钟出结果.,
tmp=Select,IntegerDigits[#^2,10,5][]==7&&IntegerDigits[#^2,10,5][]==8&&IntegerDigits[#^2,10,5][]==9&];
sol=Flatten,IntegerDigits}]],{i,10,389},{j,tmp}],1];
ans=Select[]],#==1&]&]
页: 1 [2]
查看完整版本: 五道难题求解