Distinct Resistances Possible With At Most n Distinct Resistors

On 27/11/2006 the author posted this problem to sci.math, comp.soft-sys.math.maple and rec.puzzles, which asks for the total number of distinct resistances using at most n resistors.

For example, with three resistors, {1,2,3}, here are the possible combinations, with "+" and "|" being the series and parallel operators respectively:

  1. 1
  2. 2
  3. 3
  4. 1 + 2
  5. 1 + 3
  6. 2 + 3
  7. 1 | 2
  8. 1 | 3
  9. 2 | 3
  10. 1 + 2 | 3
  11. 2 + 1 | 3
  12. 3 + 1 | 2
  13. (1 + 2) | 3
  14. (1 + 3) | 2
  15. (2 + 3) | 1
  16. 1 + 2 + 3
  17. 1 | 2 | 3

The two correct solutions for a counting argument are those by James Waldby and Alec Mihailovs. Note that James' counting expression, |Mr,k| = 2*|Mj,(k-1)| + k*|Mj,k| if 1 < k < r, is actually identical to Alec's final solution: a(n)=2*A005840(n) + n - 2, except for an offset of 2.

The above solutions concern counting the distinct resistances, but there was no answer for an explicit enumeration or for part 2) of the problem, which remains unsolved.

The problem above gave rise to sequence A123750 in Neil Sloane's Encyclopedia of Integer Sequences.

Let's see some examples with Maple. In the following discussion, i denotes the average current and R the inductive resistance. The average voltage is taken as V=220.

We have a 1000 HID Watt lamp which needs i=8.25 Amperes to operate optimally. We have only six ballasts for smaller ratings in our possession: An 80W Mercury lamp ballast, an 125W Mercury lamp ballast, two 250W Mercury lamp ballasts, and two 400W Mercury lamp ballasts. Can we wire them in some combination to get i=8.25 Amperes?

> V:=220;
> i[1]:=0.80; #current of 80W lamp
> i[2]:=1.15; #current of 125W lamp
> i[3]:=2.10; #current of 250W lamp
> i[4]:=3.20; #current of 400W lamp

> for n from 1 to 4 do
> R[n]:=V/i[n]; #load corresponding Resistances R[i]
> od;

> par:=proc() #calculate resistance of n parallel resistors
> local k,R;
> if nargs<2 then ERROR(`At least two arguments required.`) fi;
> R:=solve(1/R=sum(1/args[k],k=1..nargs),R);
> end:

> ser:=proc() #calculate resitance of n series resistors
> local k, R;
> if nargs<2 then ERROR(`At least two arguments required.`) fi;
> R:=sum(args[k],k=1..nargs);
> end:

We want a resistance equal to:
> V/8.25;
26.66666666

> par(R[1],R[2],R[4],R[4]);
26.34730539

Bingo! The solution would be then 1x80W, 1x125W and 2x400W, all in parallel. The solution also checks in terms of power dissipated, although ballasts are not ideal power sources:

> 80+125+2*400;
1005

resistors 1

Now suppose for a change that we have an unlimited number of 400W mercury lamp ballasts and want to run a 250W lamp, which runs at i[3]=2.10A. We want then a resistance:

> V/i[3];
104.7619048

> par(ser(R[4],R[4],R[4]),ser(R[4],R[4],R[4]));
103.125

Right on the dot again. Do the powers check?
> 400/3 + 400/3
266.6666667

resistors 2