57 lines
1.7 KiB
Racket
57 lines
1.7 KiB
Racket
#lang typed/racket/base
|
|
|
|
(require "quadratic.rkt"
|
|
(only-in "number-theory.rkt" perfect-square)
|
|
"types.rkt")
|
|
|
|
(provide triangle-number triangle-number?
|
|
square-number?
|
|
pentagonal-number pentagonal-number?
|
|
hexagonal-number hexagonal-number?
|
|
heptagonal-number heptagonal-number?
|
|
octagonal-number octagonal-number?)
|
|
|
|
(: triangle-number : Natural -> Natural)
|
|
(define (triangle-number n)
|
|
(quotient (* n (+ n 1)) 2))
|
|
|
|
(: triangle-number? : Natural -> Boolean)
|
|
(define (triangle-number? n)
|
|
(not (null? (quadratic-natural-solutions 1/2 1/2 (- n)))))
|
|
|
|
(: square-number? : Natural -> Boolean)
|
|
(define (square-number? n)
|
|
(and (perfect-square n) #t))
|
|
|
|
(: pentagonal-number : Natural -> Natural)
|
|
(define (pentagonal-number n)
|
|
(assert (quotient (* n (- (* 3 n) 1)) 2) natural?))
|
|
|
|
(: pentagonal-number? : Natural -> Boolean)
|
|
(define (pentagonal-number? n)
|
|
(not (null? (quadratic-natural-solutions 3/2 -1/2 (- n)))))
|
|
|
|
(: hexagonal-number : Natural -> Natural)
|
|
(define (hexagonal-number n)
|
|
(assert (* n (- (* 2 n) 1)) natural?))
|
|
|
|
(: hexagonal-number? : Natural -> Boolean)
|
|
(define (hexagonal-number? n)
|
|
(not (null? (quadratic-natural-solutions 2 -1 (- n)))))
|
|
|
|
(: heptagonal-number : Natural -> Natural)
|
|
(define (heptagonal-number n)
|
|
(assert (quotient (* n (- (* 5 n) 3)) 2) natural?))
|
|
|
|
(: heptagonal-number? : Natural -> Boolean)
|
|
(define (heptagonal-number? n)
|
|
(not (null? (quadratic-natural-solutions 5/2 -3/2 (- n)))))
|
|
|
|
(: octagonal-number : Natural -> Natural)
|
|
(define (octagonal-number n)
|
|
(assert (* n (- (* 3 n) 2)) natural?))
|
|
|
|
(: octagonal-number? : Natural -> Boolean)
|
|
(define (octagonal-number? n)
|
|
(not (null? (quadratic-natural-solutions 3 -2 (- n)))))
|