wsc810 发表于 2011-3-20 16:32:19

熟悉pell方程的进

如果pell方程
x1^2 - d*y1^2=c
和其反形
x2^2 - d*y2^2= -c
同时有解,则对该关系式有怎样的结论或其它结果,记得在学校时,《数论妙趣》一书中有介绍,可惜现在手头没有这本书,懂得朋友讲讲。

matlab 发表于 2011-3-20 18:39:30

为什么不准我发言!!!!!!!!!!!!!!!!!!

matlab 发表于 2011-3-20 18:40:38

http://mathworld.wolfram.com/PellEquation.html

matlab 发表于 2011-3-20 18:44:54

Dario Alpern's site Home Page
http://www.alpertron.com.ar/QUAD.HTM
还有java的代码下载,可以自己看看

wsc810 发表于 2011-3-21 04:57:20

链接中没有直接给出我所要的内容,又没有可下载的英文书籍。

ysr 发表于 2011-3-29 13:34:32

wsc810 发表于 2011-4-7 08:00:42

找到如下四个关系式
y1^2 + y2^2=k*y
x1^2 + x2^2=d*k*y
其中k=x1y2 - x2y1
x1y1 + x2y2=k*x
x1y1 - x2y2=t*y
其中t=x1x2 - d*y1y2
x,y是负pell方程的基解。

wsc810 发表于 2011-4-25 21:56:57

6# ysr
这种说法好像不正确吧,x^2 - ny^2=-1(n为偶数时无解。)我可以了给出很多反例如n=10,26,226

ysr 发表于 2011-4-26 16:56:05

aimisiyou 发表于 2015-9-12 14:21:37

;;; 求解形如X^2-D*Y^2=1的pell方程的最小正整数解(D为非平方数)当D=9781时X为156位数 Y为154位数
(defun sr(a)
   (setq n (strlen a) i 1 lst nil)
   (while (<= i n)
      (setq lst (cons (atoi (substr a i 1)) lst))
      (setq i (+ 1 i))
   )
   (reverse lst)
)
(defun add (lst1 lst2)
(setq k1 (length lst1))
(setq k2 (length lst2))
(if (> k1 k2)
          (repeat (- k1 k2)(setq lst2 (cons 0 lst2)) )
          (repeat (- k2 k1)(setq lst1 (cons 0 lst1)) )
   )
(setq addlst (mapcar '(lambda (x y) (+ x y)) lst1 lst2 ))
addlst
)
(defun lnum (lst n n0)
   (setq lst (mapcar '(lambda (x) (* x n))lst))
   (setq zlst (reverse lst))
   (repeat n0 (setq zlst (cons 0 zlst) ) )
(reverse zlst)
)
(defun xc(lst1 lst2)
   (setq n1 (length lst1))
   (setq n2 (length lst2))
   (setq j 1 fflst '(0))
   (if (> n1 n2)
          (while (<= j n2)
            (setq fflst (add (lnum lst1 (nth (- j 1) lst2) (- n2 j) ) fflst))
            (setq j (+ 1 j))
         )
          (while (<= j n1)
            (setq fflst (add (lnum lst2 (nth (- j 1) lst1) (- n1 j) ) fflst))
            (setq j (+ 1 j))
         )
    )
fflst
)
(defun jinw (blst)
    (while (not (apply 'and (mapcar '(lambda (x) (<= x 9)) blst )))
         (setq hlst (mapcar '(lambda (x) (rem x 10)) blst))
         (setq qlst (mapcar '(lambda (x) (/ x 10)) blst))
         (setq qlst (append qlst (list 0)))
         (setq blst (add hlst qlst))
    )
blst
)
(defun cheng (str1 str2)
    (setq lst1 (sr str1))
    (setq lst2 (sr str2))
    (setq tenlst (jinw (xc lst1 lst2)))
    (setq str (apply 'strcat (mapcar '(lambda (x) (itoa x)) tenlst ) ) )
    (if (= (car tenlst) 0)
      (setq str (vl-string-left-trim "0" str))
    )
str
)
(defun sadd (str1 str2)
(setq lst1 (sr str1))
(setq lst2 (sr str2))
(setq addlst (add lst1 lst2))
(setq tenlst (jinw addlst))
(setq str (apply 'strcat (mapcar '(lambda (x) (itoa x)) tenlst ) ) )
(if (= (car tenlst) 0)
      (setq str (vl-string-left-trim "0" str))
   )
str
)

(defun lf (n)
    (setq flst nil)
    (defun hj (lst)
       (if (/= (setq k (gcd (gcd (car lst) (cadr lst)) (gcd (cadr lst) (caddr lst)))) 1)
          (setq lst (list (/ (car lst) k) (/ (cadr lst) k) (/ (caddr lst) k)))
      )
      lst
    )
   (defun qz (lst)
      (hj lst)
      (setq va (fix (/ (+ (car lst) (* (cadr lst) (sqrt n))) (caddr lst))) )
         va
    )
   (defun hx (lst)
         (setq j (qz lst))
         (setq flst (cons j flst))
         (setq lst (list
                (- (* j (caddr lst) (caddr lst)) (* (car lst) (caddr lst)) )
                (* (cadr lst) (caddr lst) )
                (- (* n (cadr lst) (cadr lst)) (* (- (car lst) (* j (caddr lst))) (- (car lst) (* j (caddr lst)))) )
               )
          )
         (setq lst (hj lst))
          lst
   )
   (setq i (fix (sqrt n)))
   (setq flst (cons i flst))
   (setq lst (list i 1 (- n (* i i))))
   (while (not (equal lst (list i 1 1)))
       (setq lst (hx lst))
   )
(reverse flst)
)
(defunff (lst)
(if (= (rem (length lst) 2) 1)
       (setq lst (append lst (list (* 2 (car lst))) (cdr lst)))
)
lst   
)

(defun pell (lst)
   (setq pelst (list (car lst) "1"))
   (foreach e (cdr lst)
          (setq pelst (list   (sadd (cadr pelst) (cheng (car pelst) e) )   (car pelst)    )    )

)
pelst

)
(defun c:pfun ()
   (setq n (getint "请输入非完全平方数D"))
   (if (= (fix (sqrt n)) (sqrt n))
   (alert "你输入的是完全平方数!请重新输入!")
   (progn
      (setq lst (mapcar 'itoa (reverse (ff (lf n)))))
      (pell lst)
      )
   )
)
页: [1]
查看完整版本: 熟悉pell方程的进