lucas_carmichael_erdos_method.sf 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #!/usr/bin/ruby
  2. var B = 1000 # smooth value
  3. var arr = []
  4. ARGF.each {|line|
  5. var p = line.nums[-1] || next
  6. p%8 == 3 || next
  7. kronecker(5, p) == -1 || next
  8. (p-1)/2 -> is_composite || next
  9. (p+1)/4 -> is_composite || next
  10. arr << p
  11. }
  12. arr = arr.uniq
  13. arr = arr.grep {.dec.is_smooth(B)}
  14. arr = arr.grep {.inc.is_smooth(B)}
  15. say arr
  16. #var lambda_pm1 = arr.map{.dec}.lcm
  17. var lambda_pp1 = arr.map{.inc}.lcm
  18. #~ say lambda_pm1
  19. #~ say lambda_pp1
  20. #~ say gcd(lambda_pm1, lambda_pp1)
  21. say "# Prime count: #{arr.len}"
  22. say "# Lambda size: 10^#{lambda_pp1.log10.round(-5)}"
  23. say "# Divisor count: 10^#{lambda_pp1.sigma0.log10.round(-5)}"
  24. var L = lambda_pp1
  25. var P = L.divisors(1e9)\
  26. .lazy\
  27. .map { .dec }\
  28. .grep { .is_odd && .is_prime }\
  29. .grep {|p| L%p != 0 }\
  30. .grep { _%8 == 3 }\
  31. .grep { .dec.is_smooth(B) }\
  32. .grep { kronecker(5, _) == -1 }\
  33. #~ .grep { .dec.is_squarefree }\
  34. #~ .grep { .inc/4 -> is_squarefree }\
  35. .grep { .dec/2 -> is_composite }\
  36. .grep { .inc/4 -> is_composite }\
  37. .grep { (.dec/2).factor.all { _ % 4 == 1} }\
  38. .grep { (.inc/4).factor.all { _ % 4 == 3 } }\
  39. .to_a
  40. say "# Lambda primes (len = #{P.len}): #{P}"
  41. for k in (3 .. P.len `by` 2) {
  42. say "# Testing: #{k} -- 10^#{binomial(P.len, k).log10.round(-5)}"
  43. var tries = 0
  44. P.combinations(k, {|*S|
  45. if (S.prod % L == L-1) {
  46. #if (S.prod.is_psp) {
  47. say S.prod
  48. }
  49. break if (++tries > 1e6)
  50. })
  51. }