login
Smallest multiple of n having an equal number of ones and zeros and no other digits.
1

%I #9 Dec 04 2024 20:38:24

%S 10,10,100011,1100,10,100110,1001,111000,100000000011111111,10,1001,

%T 101100,1001,101010,100110,11110000,100011,100000000111111110,110010,

%U 1100,101010,1100,11010100,111000,1100,101010

%N Smallest multiple of n having an equal number of ones and zeros and no other digits.

%H Robert Israel, <a href="/A079793/b079793.txt">Table of n, a(n) for n = 1..890</a>

%p F:= proc(m)

%p uses Optimization;

%p local dmax, dmin, dmax0, cons, obj, i, j, x, r, R;

%p dmin:= max(padic:-ordp(m,2), padic:-ordp(m,5));

%p dmax0:= max(1,2*dmin-1);

%p if dmax0::even then dmax0:= dmax0+1 fi;

%p for dmax from dmax0 to 38 by 2 do

%p x:= 'x':

%p x[dmax]:= 1:

%p cons:= [add((10^i mod m) * x[i], i=dmin..dmax) = r * m,

%p add(x[i],i=dmin..dmax) = (1+dmax)/2,

%p seq(seq(`if`(10^i mod m = 10^j mod m, x[i] >= x[j],NULL), i=dmin..j-1),j=dmin+1..dmax-1) ];

%p obj:= add(10^i * x[i],i=dmin..dmax-1);

%p if dmax = dmin then

%p if dmax = 1 and (10 mod m = 0) then return 10 else next fi fi;

%p R:= traperror(Minimize(obj, cons, assume=nonnegint, binaryvariables = [seq(x[i],i=dmin..dmax-1)],depthlimit=100));

%p if R = "no feasible integer point found; use feasibilitytolerance option to adjust tolerance" then next

%p elif R = lasterror then printf("%s for dmax=%d at m=%d\n",R,dmax,m)

%p else return (R[1]+10^dmax) fi

%p od;

%p FAIL

%p end proc:

%p map(F, [$1..100]); # _Robert Israel_, Dec 04 2024

%K base,nonn

%O 1,1

%A _Amarnath Murthy_, Mar 27 2004

%E Corrected and extended by Mark Hudson (mrmarkhudson(AT)hotmail.com), Aug 12 2004

%E Name clarified by _Robert Israel_, Dec 03 2024