#!/usr/bin/perl
use strict;
use warnings;
use Math::BigRat;
=begin explation.
An electric circuit uses exclusively identical capacitors of the same value C.
The capacitors can be connected in series or in parallel to form sub-units, which can then be connected in series or in parallel with other capacitors or other sub-units to form larger sub-units, and so on up to a final circuit.
Using this simple procedure and up to n identical capacitors, we can make circuits having a range of different total capacitances. For example, using up to n=3 capacitors of 60 F each, we can obtain the following 7 distinct total capacitance values:
If we denote by D(n) the number of distinct total capacitance values we can obtain when using up to n equal-valued capacitors and the simple procedure described above, we have: D(1)=1, D(2)=3, D(3)=7 ...
Find D(18).
Reminder : When connecting capacitors C1, C2 etc in parallel, the total capacitance is CT = C1 + C2 +...,
whereas when connecting them in series, the overall capacitance is given by:
=end
=cut
my @c;
$c[1] = ['1/1'];
for my $d (2 .. 18)
{
my %h;
for my $first (1 .. int($d/2))
{
my $second = $d-$first;
for my $f_key (@{$c[$first]})
{
my $f = Math::BigRat->new($f_key);
for my $s_key (@{$c[$second]})
{
my $s = Math::BigRat->new($s_key);
for my $t ($f+$s, (1/(1/$f+1/$s)))
{
$h{$t.''}++;
}
}
}
}
$c[$d] = [keys(%h)];
print "Reached Depth $d : Got " . scalar(@{$c[$d]}). "\n";
}