Pairs with common factors

From Rosetta Code
Revision as of 12:07, 18 August 2022 by Thundergnat (talk | contribs) (New draft task and Raku entry)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Pairs with common factors is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.

Generate the sequence where each term n is the count the pairs (x,y) with 1 < x < y <= n that have at least one common prime factor.


For instance, when n = 9, examine the pairs:

   (2,3) (2,4) (2,5) (2,6) (2,7) (2,8) (2,9)
   (3,4) (3,5) (3,6) (3,7) (3,8) (3,9)
   (4,5) (4,6) (4,7) (4,8) (4,9)
   (5,6) (5,7) (5,8) (5,9)
   (6,7) (6,8) (6,9)
   (7,8) (7,9)
   (8 9)

Find all of the pairs that have at least one common prime factor:

   (2,4) (2,6) (2,8) (3,6) (3,9) (4,6) (4,8) (6,8) (6,9)

and count them:

   a(9) = 9


Terms may be found directly using the formula:

   a(n) = n × (n-1) / 2 + 1 - 𝚺{i=1..n} 𝚽(i)

For the term a(p), if p is prime, then a(p) is equal to the previous term.


Task
  • Find and display the first one hundred term of the sequence.
  • Find and display the one thousandth.


Stretch
  • Find and display the ten thousandth.


See also



Raku

<lang perl6>use Prime::Factor; use Lingua::EN::Numbers;

my \𝜑 = 0, |(1..*).hyper.map: -> \t { t × [×] t.&prime-factors.unique.map: { 1 - 1/$_ } }

my @pairs-with-common-factors = (1..*).map: -> \n { n × (n - 1) / 2 + 1 - sum (1..n).map: { 𝜑[$_] } }

say "Number of pairs with common factors - first one hundred terms:\n"

   ~ @pairs-with-common-factors[^100].batch(10)».&comma».fmt("%6s").join("\n") ~ "\n";

for ^5 { say (my $i = 10 ** $_).&ordinal.tc.fmt("%15s term: ") ~ @pairs-with-common-factors[$i - 1].&comma }</lang>

Output:
Number of pairs with common factors - first one hundred terms:
     0      0      0      1      1      4      4      7      9     14
    14     21     21     28     34     41     41     52     52     63
    71     82     82     97    101    114    122    137    137    158
   158    173    185    202    212    235    235    254    268    291
   291    320    320    343    363    386    386    417    423    452
   470    497    497    532    546    577    597    626    626    669
   669    700    726    757    773    818    818    853    877    922
   922    969    969  1,006  1,040  1,079  1,095  1,148  1,148  1,195
 1,221  1,262  1,262  1,321  1,341  1,384  1,414  1,461  1,461  1,526
 1,544  1,591  1,623  1,670  1,692  1,755  1,755  1,810  1,848  1,907

          First term: 0
          Tenth term: 14
  One hundredth term: 1,907
 One thousandth term: 195,309
 Ten thousandth term: 19,597,515