| 
注册时间2009-4-27最后登录1970-1-1威望 星金币 枚贡献 分经验 点鲜花 朵魅力 点上传 次下载 次积分3513在线时间 小时 
 | 
 
| 
本帖最后由 wsc810 于 2020-6-27 12:42 编辑
×
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?欢迎注册  
 以下是计算分解  $2^512+1$  报错
 
 
 IntegerPart::meprec: 当计算 IntegerPart[(98326482234939147319765934357793685660339022949204652705961168633314897265284+Sqrt[13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084097])/21411857147225534274333691936648159351360900761484521674541875264122802693051] 时,达到内部精确度极限值 MaxExtraPrecision = 50
 
 用向下取整函数  Floor[ ]  还是一样
 
 $P_0=\sqrt{d} (mod Q_0^2)$
 
 分解整数所用的原理是用到如下pell 方程公式,迭代过程中$Q_i$为完全平方数终止迭代
 
 $(Q_0^2p_i-P_0q_i)^2-dq_i^2=(-1)^{i+1}Q_0^2Q_i$
 
 
 复制代码Clear[t, a, d, P, Q, i, p, q]; d = 2^512 + 1; pell = -1; 
P[0] = 107450; Q[0] = 523^2;
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]];
 p[-1] = 0; p[0] = 1; p[i + 1] = a[i] p[i] + p[i - 1];
 q[-1] = 1; q[0] = 0; q[i + 1] = a[i] q[i] + q[i - 1];
 
 If[Q[i + 1] == Q[i] || P[i + 1] == P[i] || 
   FractionalPart[Sqrt[Q[i + 1]]] == 0, 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]}
GCD[Q[0] p[i + 1] - P[0] q[i + 1] + Sqrt[Q[i + 1] Q[0]], d]
 
 | 
 |