找回密码
 欢迎注册
查看: 25565|回复: 0

[求助] 连分式PQa算法修改

[复制链接]
发表于 2020-2-12 19:43:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
本帖最后由 wsc810 于 2020-2-12 20:03 编辑

  1. Clear[test, x, a, f, t]
  2. d = 45113; pell = -1; P = 0; Q = 1;
  3. x[P_, Q_] := (P + Sqrt[d])/Q;
  4. a[P_, Q_] := IntegerPart[x[P, Q]];
  5. t = 1/(x[P, Q] - a[P, Q]);
  6. f[{_, {i_, P_, Q_}}] := {{i, P, Q}, {i + 1, Q a[P, Q] - P, (d - (Q a[P, Q] - P)^2)/Q}}
  7. test[{_, {i_, P_, Q_}}] := (x[P, Q] != t && P != pell) || i == 1
  8. First@NestWhile[f, {Null, {0, P, Q}}, test] // AbsoluteTiming
复制代码


程序想在Q[i+1]=Q[ i ]  或者P[i+1]=P[ i ] 处终止,如何修改上述代码,谁会,非常感谢!!!

以下是最原始的程序

  1. Clear[t, a]; d = 45113; pell = -1; P[0] = 0; Q[0] = 1;
  2. t[0] = (P[0] + Sqrt[d])/Q[0]
  3. a[0] = IntegerPart[t[0]];
  4. i = 0; While[(t[i] != 1/(t[0] - a[0]) && P[i] != pell) || i == 1,
  5. P[i + 1] = Q[i] a[i] - P[i];
  6. Q[i + 1] = (d - P[i + 1]^2)/Q[i];
  7. t[i + 1] = (P[i + 1] + Sqrt[d])/Q[i + 1];
  8. a[i + 1] = IntegerPart[t[i + 1]];
  9. If[Q[i + 1] == Q[i] || P[i + 1] == P[i], Break[]];
  10. Print[{i, Q[i], P[i], a[i]}] i++];
  11. {i, Q[i], P[i], a[i]}
  12. {i + 1, Q[i + 1], P[i + 1], a[i + 1]}
复制代码


要求程序运行的最终结果,不必保留中间的运算值,也就是数组,将程序写成动态形式

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-11-21 21:12 , Processed in 0.022990 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表