summaryrefslogtreecommitdiff
path: root/main.rkt
diff options
context:
space:
mode:
Diffstat (limited to 'main.rkt')
-rw-r--r--main.rkt44
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))))
+