find.pl 785 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #!/usr/bin/perl
  2. use 5.020;
  3. use strict;
  4. use warnings;
  5. use Math::GMPz;
  6. use Math::AnyNum;
  7. use ntheory qw(:all);
  8. use experimental qw(signatures);
  9. sub primality_pretest ($k) {
  10. !(!($k % 3) || !($k % 5) || !($k % 7) || !($k % 11) ||
  11. !($k % 13) || !($k % 17) || !($k % 19) || !($k % 23)
  12. )
  13. }
  14. my $k = 8128;
  15. my @divisors = divisors($k);
  16. pop @divisors;
  17. sub isok($m) {
  18. foreach my $d(@divisors) {
  19. if (!primality_pretest($k*$d*$m - 1)) {
  20. return 0;
  21. }
  22. }
  23. foreach my $d(@divisors) {
  24. if (!is_prime($k*$d*$m - 1)) {
  25. return 0;
  26. }
  27. }
  28. return 1;
  29. }
  30. my $multiplier = 3*3*5;
  31. foreach my $n(99098813-100..1e10) {
  32. if (isok($n*$multiplier)) {
  33. say "Found: $n -> ", $n*$multiplier;
  34. last;
  35. }
  36. }