n-bit_random_prime.sf 716 B

12345678910111213141516171819202122232425262728293031323334
  1. #!/usr/bin/ruby
  2. # Daniel "Trizen" Șuteu
  3. # License: GPLv3
  4. # Date: 15 December 2016
  5. # https://github.com/trizen
  6. # Generate a provable n-bit random prime.
  7. func nbit_random_prime(Number bits { _ >= 3 }) {
  8. bits -= 2
  9. loop {
  10. var num = Num('1' + bits.of { pick(0..1) }.join + '1', 2)
  11. if (num.is_prime) {
  12. if (!num.is_prov_prime) {
  13. warn "Got a false positive: #{num} (first BSPW counter-example)"
  14. next
  15. }
  16. if (!num.is_prob_prime) {
  17. warn "Strange error for: #{num}"
  18. next
  19. }
  20. return num
  21. }
  22. }
  23. }
  24. var bits = 512
  25. var p = nbit_random_prime(bits)
  26. say "P(#{bits}) = #{p}"