login
A079793
Smallest multiple of n having an equal number of ones and zeros and no other digits.
1
10, 10, 100011, 1100, 10, 100110, 1001, 111000, 100000000011111111, 10, 1001, 101100, 1001, 101010, 100110, 11110000, 100011, 100000000111111110, 110010, 1100, 101010, 1100, 11010100, 111000, 1100, 101010
OFFSET
1,1
LINKS
MAPLE
F:= proc(m)
uses Optimization;
local dmax, dmin, dmax0, cons, obj, i, j, x, r, R;
dmin:= max(padic:-ordp(m, 2), padic:-ordp(m, 5));
dmax0:= max(1, 2*dmin-1);
if dmax0::even then dmax0:= dmax0+1 fi;
for dmax from dmax0 to 38 by 2 do
x:= 'x':
x[dmax]:= 1:
cons:= [add((10^i mod m) * x[i], i=dmin..dmax) = r * m,
add(x[i], i=dmin..dmax) = (1+dmax)/2,
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) ];
obj:= add(10^i * x[i], i=dmin..dmax-1);
if dmax = dmin then
if dmax = 1 and (10 mod m = 0) then return 10 else next fi fi;
R:= traperror(Minimize(obj, cons, assume=nonnegint, binaryvariables = [seq(x[i], i=dmin..dmax-1)], depthlimit=100));
if R = "no feasible integer point found; use feasibilitytolerance option to adjust tolerance" then next
elif R = lasterror then printf("%s for dmax=%d at m=%d\n", R, dmax, m)
else return (R[1]+10^dmax) fi
od;
FAIL
end proc:
map(F, [$1..100]); # Robert Israel, Dec 04 2024
CROSSREFS
Sequence in context: A364773 A052983 A072804 * A086884 A284201 A324660
KEYWORD
base,nonn
AUTHOR
Amarnath Murthy, Mar 27 2004
EXTENSIONS
Corrected and extended by Mark Hudson (mrmarkhudson(AT)hotmail.com), Aug 12 2004
Name clarified by Robert Israel, Dec 03 2024
STATUS
approved