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]
展开
 我来答
草红样
2013-08-26 · TA获得超过240个赞
知道小有建树答主
回答量:137
采纳率:0%
帮助的人:168万
展开全部

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

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式