算法题:一个数加100后是一个完全平方数,加268后也是完全平方数
mathematica吧
全部回复
仅看楼主
level 6
sgylvqº 楼主
求这个数
比较丑的写法:
(DeleteDuplicates@(If[
Head@((# + 100)^((1/2))) === Integer &&
Head@((# + 268)^((1/2))) === Integer, #, 0] & /@
Array[# &, 1000000]))[[2 ;;]]
有没有更好的写法?
2021年05月18日 04点05分 1
level 6
sgylvqº 楼主
两周没用mma,各种写法都忘光了[泪]
2021年05月18日 04点05分 2
level 6
sgylvqº 楼主
优化了一下
If[Head@((# + 100)^((1/2))) === Integer &&
Head@((# + 268)^((1/2))) === Integer, #, 0] & /@
Array[# &, 1000] //. {m___, 0, n___} -> {m, n}
2021年05月18日 05点05分 3
level 7
Union[n^2-100/.FindInstance[m^2-n^2==168,{m,n},Integers,100]]
2021年05月18日 05点05分 4
这么巧,马上试试
2021年05月18日 05点05分
Reduce[m^2-n^2==168&&m>n>0,{m,n},Integers]
2021年05月18日 05点05分
妙啊[玫瑰]
2021年05月18日 05点05分
2021年05月18日 07点05分
level 6
sgylvqº 楼主
中间的2个结构是相似的
Head@((# + 100)^((1/2))) === Integer &&
Head@((# + 268)^((1/2))) === Integer, #, 0
有没有什么办法把他们写在一起,但是映射的#已经在if用过一次了
2021年05月18日 05点05分 5
吧务
level 10
利用PackedArray和Listable加速
Pick[
#, Transpose@{Mod[(#
+100.)^(.5), 1.], Mod[(#+268.)^(.5), 1.]}, {0., 0.}]&@Range@1000000
2021年05月18日 09点05分 6
pick太强了[乖],感觉底层函数是if或者else?
2021年05月26日 13点05分
level 3
Cases[Range[10^3]^2 - 100, x_ /; IntegerQ[Sqrt[x + 268]] && x > 0]
2021年05月21日 11点05分 7
Case用得好[哈哈]
2021年05月26日 13点05分
吧务
level 12
Intersection[
# - 100, #
- 268] &[Range[10, 1000]^2]
2021年05月29日 00点05分 8
[真棒][真棒][真棒]
2021年09月22日 22点09分
level 6
sgylvqº 楼主
注意到(n + 1)^2 - n^2 是没有上界的:

# Boole[IntegerQ@((#
+ 100)^((1/2))) &&
IntegerQ@((# + 268)^((1/2)))] & /@
Range@(Floor@((Reduce[(n + 1)^2 - n^2 <= 268 - 100, {n}][[2]])^2) +
1) //. {m___, 0, n___} -> {m, n}
2022年05月31日 11点05分 9
1