generate_special_form.pl 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #!/usr/bin/perl
  2. # https://oeis.org/draft/A306479
  3. use 5.014;
  4. use List::Util qw(uniq);
  5. use ntheory qw(factor_exp vecprod forcomb forprimes vecmin is_square_free is_prime vecall factor);
  6. sub rad {
  7. my ($n) = @_;
  8. vecprod(map{$_->[0]}factor_exp($n));
  9. }
  10. my %table;
  11. forprimes {
  12. push @{$table{rad($_-1)}}, $_;
  13. foreach my $k(2..50) {
  14. my $q = ($_-1)*$k + 1;
  15. if (is_prime($q)) {
  16. my $rad = rad($q-1);
  17. push @{$table{$rad}}, $q;
  18. @{$table{$rad}} = uniq(@{$table{$rad}});
  19. }
  20. }
  21. } 5*1e7;
  22. say "Done sieving...";
  23. my %seen;
  24. #foreach my $rad (keys %table) {
  25. while (my ($rad, $arr) = each %table) {
  26. my @v = uniq(@$arr);
  27. @v >= 2 or next;
  28. forcomb {
  29. my $prod = vecprod(@v[@_]);
  30. if (rad($prod-1) == $rad) {
  31. say $prod;
  32. }
  33. } scalar(@v), 2;
  34. }
  35. __END__
  36. 6031047559681
  37. 763546828801
  38. 1525781251
  39. 184597450297471
  40. 732785991945841
  41. 1525781251
  42. 732785991945841
  43. 6031047559681
  44. 763546828801
  45. 184597450297471
  46. 1525781251
  47. 732785991945841
  48. 184597450297471
  49. 6031047559681
  50. 763546828801
  51. 55212580317094201
  52. 763546828801
  53. 184597450297471
  54. 732785991945841
  55. 18641350656000001
  56. 55212580317094201
  57. 6031047559681
  58. 1525781251
  59. 763546828801, 6031047559681, 184597450297471, 732785991945841, 18641350656000001, 55212580317094201
  60. var table = Hash()
  61. for p in (primes(781210)) {
  62. table{p-1 -> rad} := [] << p
  63. }
  64. for p,v in (table) {
  65. var t = Num(p)
  66. var len = v.len
  67. #say "Testing: #{p} -> #{len}"
  68. #len = 10 if (len > 10)
  69. for k in (2..2) {
  70. combinations(v, k, {|*a|
  71. if (a.prod - 1 -> rad == t) {
  72. say a.prod
  73. }
  74. })
  75. }
  76. }
  77. #say table{6510}