wsc810 发表于 2021-5-22 13:41:34

利用pell方程的二次曲线进行因子分解

本帖最后由 wsc810 于 2021-5-22 18:18 编辑

在pell方程中我们有如下公式

                     $(p_nq_{n-1}+p_{n-1}q_n)^2=d*4*(q_nq_{n-1})^2+4*(-1)^nP_{n+1}q_nq_{n-1}+1$

推导过程   $(p_nq_{n-1}+p_{n-1}q_n)^2=(p_nq_{n-1} - p_{n-1}q_n)^2+4p_np_{n-1}q_nq_{n-1}=1+4p_np_{n-1}q_nq_{n-1}$

               $ p_np_{n-1}-dq_nq_{n-1}=(-1)^nP_{n+1}$

               $1+4(dq_nq_{n-1}+(-1)^nP_{n+1})q_nq_{n-1}=d*4*(q_nq_{n-1})^2+4*(-1)^nP_{n+1}q_nq_{n-1}+1$

我们熟悉的二次方程

                $ax^2+2bx+c=y^2$

将这个方程变形

                $(ax+b)^2=(b^2-ac)+ay^2$

同样题目中的方程可变形为

                $(d2q_nq_{n-1}+(-1)^nP_{n+1})^2-d(p_nq_{n-1}+p_{n-1}q_n)^2=-Q_nQ_{n-1}$

假设我们要分解的数为$n=Q_nQ_{n+1}$,Q_n及Q_{n+1}是 n 的两个未知的因子

将上述方程对n取模            $(P_{n+1}^2*2q_nq_{n-1}+(-1)^nP_{n+1})^2=(P_{n+1})^2(p_nq_{n-1}+p_{n-1}q_n)^2 (mod Q_nQ_{n+1})$


方程两边消去$P_{n+1}$

                                           $(P_{n+1}*2q_nq_{n-1}+(-1)^n)^2=(p_nq_{n-1}+p_{n-1}q_n)^2(modQ_nQ_{n+1})$

                                          $ y=p_nq_{n-1}+p_{n-1}q_n$

计算$GCD $得到n 的一个因子


下面是实例验算$n=4181,P_{n+1}=66$;    $ p_n=247789693;q_n=2681826;p_{n-1}=176773752;q_{n-1}=1913221$


                   GCD[ 66*2*2681826*1913221-1+247789693*1913221+176773752*2681826,4181]=113


现在的问题是如何快速找到$q_nq_{n-1}$使得二次函数的值为平方数

wsc810 发表于 2021-5-22 14:43:53

本帖最后由 wsc810 于 2021-5-22 14:46 编辑

这是要测试的代码,该如何优化

Clear["Global`*"]; n = 4181; d = n + P^2; P = 66;
Do] == 0, Break[]];
t = GCD, n],
{x, 5*10^12, 6*10^12}]
Print[{t, y}]
页: [1]
查看完整版本: 利用pell方程的二次曲线进行因子分解