1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | ; http://programmingpraxis.com/contents/themes/#Prime Numbers (define (expm b e m) (define (times p q) (modulo (* p q) m)) (let loop ((b b) (e e) (x 1)) (if (zero? e) x (loop (times b b) (quotient e 2) (if (odd? e) (times b x) x))))) (define (primes n) ; assumes n is an integer greater than one (let* ((len (quotient (- n 1) 2)) (bits (make-vector len #t))) (let loop ((i 0) (p 3) (ps (list 2))) (cond ((< n (* p p)) (do ((i i (+ i 1)) (p p (+ p 2)) (ps ps (if (vector-ref bits i) (cons p ps) ps))) ((= i len) (reverse ps)))) ((vector-ref bits i) (do ((j (+ (* 2 i i) (* 6 i) 3) (+ j p))) ((<= len j) (loop (+ i 1) (+ p 2) (cons p ps))) (vector-set! bits j #f))) (else (loop (+ i 1) (+ p 2) ps)))))) (define prime? (let ((ps (primes 100))) (lambda (n) ; assumes n is an integer greater than one (define (spsp? n a) (define (f d s) (do ((r 0 (+ r 1))) ((or (= (expm a (* d (expt 2 r)) n) (- n 1)) (= r s)) (< r s)))) (do ((d (- n 1) (/ d 2)) (s 0 (+ s 1))) ((odd? d) (if (= (expm a d n) 1) #t (f d s))))) (if (member n ps) #t (do ((ps ps (cdr ps))) ((or (null? ps) (not (spsp? n (car ps)))) (null? ps))))))) (define (factors n) (if (<= -1 n 1) (list n) (if (< n 0) (cons -1 (factors (- n))) (let fact ((n n) (c 1) (fs (list))) (define (f x) (modulo (+ (* x x) c) n)) (if (even? n) (fact (/ n 2) c (cons 2 fs)) (if (= n 1) fs (if (prime? n) (sort (cons n fs) <) (let loop ((t 2) (h 2) (d 1)) (cond ((= d 1) (let ((t (f t)) (h (f (f h)))) (loop t h (gcd (- t h) n)))) ((= d n) (fact n (+ c 1) fs)) ; cyclic ((prime? d) (fact (/ n d) (+ c 1) (cons d fs))) (else (fact n (+ c 1) fs))))))))))) (display (factors 41748850938502584251)) |
OyBodHRwOi8vcHJvZ3JhbW1pbmdwcmF4aXMuY29tL2NvbnRlbnRzL3RoZW1lcy8jUHJpbWUgTnVtYmVycwoKKGRlZmluZSAoZXhwbSBiIGUgbSkKICAoZGVmaW5lICh0aW1lcyBwIHEpIChtb2R1bG8gKCogcCBxKSBtKSkKICAobGV0IGxvb3AgKChiIGIpIChlIGUpICh4IDEpKQogICAgKGlmICh6ZXJvPyBlKSB4CiAgICAgIChsb29wICh0aW1lcyBiIGIpIChxdW90aWVudCBlIDIpCiAgICAgICAgICAgIChpZiAob2RkPyBlKSAodGltZXMgYiB4KSB4KSkpKSkKCihkZWZpbmUgKHByaW1lcyBuKSA7IGFzc3VtZXMgbiBpcyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvbmUKICAobGV0KiAoKGxlbiAocXVvdGllbnQgKC0gbiAxKSAyKSkgKGJpdHMgKG1ha2UtdmVjdG9yIGxlbiAjdCkpKQogICAgKGxldCBsb29wICgoaSAwKSAocCAzKSAocHMgKGxpc3QgMikpKQogICAgICAoY29uZCAoKDwgbiAoKiBwIHApKQogICAgICAgICAgICAgIChkbyAoKGkgaSAoKyBpIDEpKSAocCBwICgrIHAgMikpCiAgICAgICAgICAgICAgICAgICAocHMgcHMgKGlmICh2ZWN0b3ItcmVmIGJpdHMgaSkgKGNvbnMgcCBwcykgcHMpKSkKICAgICAgICAgICAgICAgICAgKCg9IGkgbGVuKSAocmV2ZXJzZSBwcykpKSkKICAgICAgICAgICAgKCh2ZWN0b3ItcmVmIGJpdHMgaSkKICAgICAgICAgICAgICAoZG8gKChqICgrICgqIDIgaSBpKSAoKiA2IGkpIDMpICgrIGogcCkpKQogICAgICAgICAgICAgICAgICAoKDw9IGxlbiBqKSAobG9vcCAoKyBpIDEpICgrIHAgMikgKGNvbnMgcCBwcykpKQogICAgICAgICAgICAgICAgKHZlY3Rvci1zZXQhIGJpdHMgaiAjZikpKQogICAgICAgICAgICAoZWxzZSAobG9vcCAoKyBpIDEpICgrIHAgMikgcHMpKSkpKSkKCihkZWZpbmUgcHJpbWU/IChsZXQgKChwcyAocHJpbWVzIDEwMCkpKQogIChsYW1iZGEgKG4pIDsgYXNzdW1lcyBuIGlzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9uZQogICAgKGRlZmluZSAoc3BzcD8gbiBhKQogICAgICAoZGVmaW5lIChmIGQgcykKICAgICAgICAoZG8gKChyIDAgKCsgciAxKSkpCiAgICAgICAgICAgICgob3IgKD0gKGV4cG0gYSAoKiBkIChleHB0IDIgcikpIG4pICgtIG4gMSkpICg9IHIgcykpCiAgICAgICAgICAgICAgKDwgciBzKSkpKQogICAgICAoZG8gKChkICgtIG4gMSkgKC8gZCAyKSkgKHMgMCAoKyBzIDEpKSkKICAgICAgICAgICgob2RkPyBkKSAoaWYgKD0gKGV4cG0gYSBkIG4pIDEpICN0IChmIGQgcykpKSkpCiAgICAoaWYgKG1lbWJlciBuIHBzKSAjdAogICAgICAoZG8gKChwcyBwcyAoY2RyIHBzKSkpCiAgICAgICAgICAoKG9yIChudWxsPyBwcykgKG5vdCAoc3BzcD8gbiAoY2FyIHBzKSkpKSAobnVsbD8gcHMpKSkpKSkpCgooZGVmaW5lIChmYWN0b3JzIG4pCiAgKGlmICg8PSAtMSBuIDEpIChsaXN0IG4pIChpZiAoPCBuIDApIChjb25zIC0xIChmYWN0b3JzICgtIG4pKSkKICAgIChsZXQgZmFjdCAoKG4gbikgKGMgMSkgKGZzIChsaXN0KSkpCiAgICAgIChkZWZpbmUgKGYgeCkgKG1vZHVsbyAoKyAoKiB4IHgpIGMpIG4pKQogICAgICAoaWYgKGV2ZW4/IG4pIChmYWN0ICgvIG4gMikgYyAoY29ucyAyIGZzKSkKICAgICAgICAoaWYgKD0gbiAxKSBmcyAoaWYgKHByaW1lPyBuKSAoc29ydCAoY29ucyBuIGZzKSA8KQogICAgICAgICAgKGxldCBsb29wICgodCAyKSAoaCAyKSAoZCAxKSkKICAgICAgICAgICAgKGNvbmQgKCg9IGQgMSkgKGxldCAoKHQgKGYgdCkpIChoIChmIChmIGgpKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvb3AgdCBoIChnY2QgKC0gdCBoKSBuKSkpKQogICAgICAgICAgICAgICAgICAoKD0gZCBuKSAoZmFjdCBuICgrIGMgMSkgZnMpKSA7IGN5Y2xpYwogICAgICAgICAgICAgICAgICAoKHByaW1lPyBkKSAoZmFjdCAoLyBuIGQpICgrIGMgMSkgKGNvbnMgZCBmcykpKQogICAgICAgICAgICAgICAgICAoZWxzZSAoZmFjdCBuICgrIGMgMSkgZnMpKSkpKSkpKSkpKSAgICAgICAgICAgICAgICAgCgooZGlzcGxheSAoZmFjdG9ycyA0MTc0ODg1MDkzODUwMjU4NDI1MSkp
-
upload with new input
-
result: Success time: 0.15s memory: 4664 kB returned value: 0
(6461335039 6461335109)


