(* 実験のために抗原陰性の血清2024検体を準備していたところ、手違いで抗原陽性の検体が1つ紛れて2025検体になった。
抗原陽性の検体を同定する *)

solve[m_]:=( (* m:総数検体数 *)
n=2^Ceiling[Log[2,m]];
t1=Table[Reverse@IntegerDigits[x,2],{x,1,n-1}];
ans=Table[{},Log[2,n]];
For[i=1,i<m,i++,AppendTo[ans[[#]],i]& /@ Flatten@Position[t1[[i]],1]];
Reverse[ans] (* 混合検体グループの構成 *)
)

re=solve[2025];
Table[Short@re[[i]],{i,1,Length[re]}]

(* 網羅して確認 *)
samples=2025;
re=solve[samples];
verify[x_]:=(
bin=Table[Boole@MemberQ[re[[i]],x],{i,Length[re]}];(* グループ毎の結果 1:陽性 0:陰性 *)
pos=Flatten@Position[bin,1];
neg=Flatten@Position[bin,0];
Complement[Intersection @@ re[[pos]],Flatten@re[[neg]]]=={x}
)
AllTrue[Range[samples-1],verify]