
mathematica 计算真的好慢好慢,是电脑太挫吗还是程序太糙?求高手解答
这个题目是要求非完全平方根的循环重数...反正不太好解释,写出来最省事的程序就是下面这个了,可是等好久都算不出来啊,想请教一下这个程序里面哪些部分是比较耗时间的,因为10...
这个题目是要求非完全平方根的循环重数...反正不太好解释,写出来最省事的程序就是下面这个了,可是等好久都算不出来啊,想请教一下这个程序里面哪些部分是比较耗时间的,因为10000个数的话确实伤不起,跪求解答...
f[x_, n_] :=
If[IntegerQ[Sqrt[x]], {0, 0},
If[n == 0, {Floor[Sqrt[x]],
1/(Sqrt[x] - Floor[Sqrt[x]])}, {Floor[f[x, n - 1][[2]]],
1/(f[x, n - 1][[2]] - Floor[f[x, n - 1][[2]]])}]];
aa = 0;
For[x = 1, x < 10000, x++,
If[IntegerQ[Sqrt[x]] == False,
n = 2;
While[f[x, n] != f[x, 1], n++];
n - 1;
If[OddQ[n], aa++]
]
];
Print[aa] 展开
f[x_, n_] :=
If[IntegerQ[Sqrt[x]], {0, 0},
If[n == 0, {Floor[Sqrt[x]],
1/(Sqrt[x] - Floor[Sqrt[x]])}, {Floor[f[x, n - 1][[2]]],
1/(f[x, n - 1][[2]] - Floor[f[x, n - 1][[2]]])}]];
aa = 0;
For[x = 1, x < 10000, x++,
If[IntegerQ[Sqrt[x]] == False,
n = 2;
While[f[x, n] != f[x, 1], n++];
n - 1;
If[OddQ[n], aa++]
]
];
Print[aa] 展开
展开全部
Mathematica不是这样用的,
Tr@Mod[Length /@ ContinuedFraction[Sqrt@ Range@1*^4][[All, -1]], 2] // AbsoluteTiming
还可以更快,下面这段程序耗时<0.1s
Compile[{},
Module[{cnt = 0, L = 10000, limit, k, r, period},
Do[
r = limit = Floor@Sqrt@n;
If[limit^2 == n, Continue[]];
{k, period} = {1, 0};
While[k != 1 || period == 0,
k = Quotient[n - r^2, k];
r = Quotient[limit + r, k]*k - r;
period++
];
If[OddQ[period], cnt++];
, {n, 2, L}];
cnt
]
][]

2025-04-08 广告
Stata系列软件全国授权代理——北京友万。北京友万信息科技有限公司,总部设在北京市昌平科技园区,是一家专注于引进国内外软硬件产品的中关村高新技术企业。公司拥有多项自主研发的数据平台,依托自身经验丰富的技术团队资源,为不同领域的客户提供全面...
点击进入详情页
本回答由友万科技提供
展开全部
我猜这是ProjectEular上面的第64题吧?我的代码是:
Select[ContinuedFraction /@ Sqrt /@ Range@10000,
Length@# > 1 && OddQ@Length@Last@# &] // Length // Timing
用时25秒。
既然用Mathematica,尽量多用现成的内置函数吧,它所采用的算法比我们自己写的优化的好多了。当然如果你是想要自己写的话那就要多去找找关于此类算法优化的书和高手了。
另,Mathematica里面尽量少用For和If这类结构化语句,耗时极大。
Select[ContinuedFraction /@ Sqrt /@ Range@10000,
Length@# > 1 && OddQ@Length@Last@# &] // Length // Timing
用时25秒。
既然用Mathematica,尽量多用现成的内置函数吧,它所采用的算法比我们自己写的优化的好多了。当然如果你是想要自己写的话那就要多去找找关于此类算法优化的书和高手了。
另,Mathematica里面尽量少用For和If这类结构化语句,耗时极大。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询