- 注册时间
- 2009-4-27
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 3513
- 在线时间
- 小时
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?欢迎注册
×
本帖最后由 wsc810 于 2020-2-12 20:03 编辑
- Clear[test, x, a, f, t]
- d = 45113; pell = -1; P = 0; Q = 1;
- x[P_, Q_] := (P + Sqrt[d])/Q;
- a[P_, Q_] := IntegerPart[x[P, Q]];
- t = 1/(x[P, Q] - a[P, Q]);
- f[{_, {i_, P_, Q_}}] := {{i, P, Q}, {i + 1, Q a[P, Q] - P, (d - (Q a[P, Q] - P)^2)/Q}}
- test[{_, {i_, P_, Q_}}] := (x[P, Q] != t && P != pell) || i == 1
- First@NestWhile[f, {Null, {0, P, Q}}, test] // AbsoluteTiming
复制代码
程序想在Q[i+1]=Q[ i ] 或者P[i+1]=P[ i ] 处终止,如何修改上述代码,谁会,非常感谢!!!
以下是最原始的程序
- Clear[t, a]; d = 45113; pell = -1; P[0] = 0; Q[0] = 1;
- t[0] = (P[0] + Sqrt[d])/Q[0]
- a[0] = IntegerPart[t[0]];
- i = 0; While[(t[i] != 1/(t[0] - a[0]) && P[i] != pell) || i == 1,
- P[i + 1] = Q[i] a[i] - P[i];
- Q[i + 1] = (d - P[i + 1]^2)/Q[i];
- t[i + 1] = (P[i + 1] + Sqrt[d])/Q[i + 1];
- a[i + 1] = IntegerPart[t[i + 1]];
- If[Q[i + 1] == Q[i] || P[i + 1] == P[i], Break[]];
- Print[{i, Q[i], P[i], a[i]}] i++];
- {i, Q[i], P[i], a[i]}
- {i + 1, Q[i + 1], P[i + 1], a[i + 1]}
复制代码
要求程序运行的最终结果,不必保留中间的运算值,也就是数组,将程序写成动态形式
|
|