73 lines
2.6 KiB
Factor
73 lines
2.6 KiB
Factor
USING: help.markup help.syntax math sequences ;
|
|
IN: math.primes
|
|
|
|
{ next-prime prime? } related-words
|
|
|
|
HELP: next-prime
|
|
{ $values { "n" integer } { "p" "a prime number" } }
|
|
{ $description "Return the next prime number greater than " { $snippet "n" } "." } ;
|
|
|
|
HELP: prime?
|
|
{ $values { "n" "an integer" } { "?" "a boolean" } }
|
|
{ $description "Test if an integer is a prime number." } ;
|
|
|
|
{ primes-upto primes-between } related-words
|
|
|
|
HELP: primes-upto
|
|
{ $values { "n" "an integer" } { "seq" "a sequence" } }
|
|
{ $description "Return a sequence containing all the prime numbers smaller or equal to " { $snippet "n" } "." } ;
|
|
|
|
HELP: primes-between
|
|
{ $values { "low" "an integer" } { "high" "an integer" } { "seq" "a sequence" } }
|
|
{ $description "Return a sequence containing all the prime numbers between " { $snippet "low" } " and " { $snippet "high" } "." } ;
|
|
|
|
HELP: find-relative-prime
|
|
{ $values
|
|
{ "n" integer }
|
|
{ "p" integer }
|
|
}
|
|
{ $description "Returns a number that is relatively prime to " { $snippet "n" } "." } ;
|
|
|
|
HELP: find-relative-prime*
|
|
{ $values
|
|
{ "n" integer } { "guess" integer }
|
|
{ "p" integer }
|
|
}
|
|
{ $description "Returns a number that is relatively prime to " { $snippet "n" } ", starting by trying " { $snippet "guess" } "." } ;
|
|
|
|
HELP: random-prime
|
|
{ $values
|
|
{ "numbits" integer }
|
|
{ "p" integer }
|
|
}
|
|
{ $description "Returns a prime number exactly " { $snippet "numbits" } " bits in length, with the topmost bit set to one." } ;
|
|
|
|
HELP: unique-primes
|
|
{ $values
|
|
{ "n" integer }
|
|
{ "numbits" integer }
|
|
{ "seq" sequence }
|
|
}
|
|
{ $description "Generates a sequence of " { $snippet "n" } " unique prime numbers with exactly " { $snippet "numbits" } " bits." } ;
|
|
|
|
ARTICLE: "math.primes" "Prime numbers"
|
|
"The " { $vocab-link "math.primes" } " vocabulary implements words related to prime numbers. Serveral useful vocabularies exist for testing primality. The Sieve of Eratosthenes in " { $vocab-link "math.primes.erato" } " is useful for testing primality below five million. For larger integers, " { $vocab-link "math.primes.miller-rabin" } " is a fast probabilstic primality test. The " { $vocab-link "math.primes.lucas-lehmer" } " vocabulary implements an algorithm for finding huge Mersenne prime numbers." $nl
|
|
"Testing if a number is prime:"
|
|
{ $subsections prime? }
|
|
"Generating prime numbers:"
|
|
{ $subsections
|
|
next-prime
|
|
primes-upto
|
|
primes-between
|
|
random-prime
|
|
}
|
|
"Generating relative prime numbers:"
|
|
{ $subsections
|
|
find-relative-prime
|
|
find-relative-prime*
|
|
}
|
|
"Make a sequence of random prime numbers:"
|
|
{ $subsections unique-primes } ;
|
|
|
|
ABOUT: "math.primes"
|