diff options
Diffstat (limited to 'main.rkt')
-rw-r--r-- | main.rkt | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/main.rkt b/main.rkt new file mode 100644 index 0000000..845bd18 --- /dev/null +++ b/main.rkt @@ -0,0 +1,44 @@ +#lang racket + +(require "modulo-arithmetic.rkt") + +;; 4a^3 + 27b^2 != 0 +(define a 2) +(define b 3) + +(define (point-in-curve lst) + (define x (car lst)) + (define y (cadr lst)) + (= (* y y) (+ (* x x x) (* x a) b))) + +(define (add p q) + (cond ((not (point-in-curve p)) + q) + ((not (point-in-curve q)) + p) + (else + (define xp (first p)) + (define xq (first q)) + (define yp (second p)) + (define yq (second q)) + (let* ((m (if (equal? p q) + (/ (+ (* 3 xp xp) a) + (* 2 yp)) + (/ (- yp yq) + (- xp xq)))) + (xr (- (* m m) xp xq)) + (yr (+ yp (* m (- xr xp))))) + (list xr (- yr)))))) + +(define (mul n p) + (cond ((= n 0) + (list 0 0)) + ((= n 1) + p) + (else + (add p (mul (sub1 n) p))))) + +(define curve-points (filter point-in-curve + (cartesian-product (range cardinality) + (range cardinality)))) + |