Problem: Let $S_1$, $S_2$, \dots, $S_{100}$ be finite sets of integers whose intersection is not empty.
For each non-empty $T \subseteq \{S_1, S_2, \ldots, S_{100}\}$,
the size of the intersection of the sets in $T$ is a multiple of $|T|$.
What is the smallest possible number of elements which are in at least $50$ sets?

Solution: The answer is $50 \binom{100}{50}$.

\paragraph{Rephrasing (cosmetic translation only, nothing happens yet).}
We encode with binary strings $v \in \FF_2^{100}$ of length $100$.
Write $v \subseteq w$ if $w$ has $1$'s in every component $v$ does,
and let $|v|$ denote the number of $1$'s in $v$.

Then for each $v$, we let $f(v)$ denote the number of elements $x \in \bigcup S_i$
such that $x \in S_i \iff v_i = 1$.
For example,
\begin{itemize}
  \ii $f(1\dots1)$ denotes $|\bigcap_1^{100} S_i|$,
  so we know $f(1 \dots 1) \equiv 0 \pmod{100}$.
  \ii $f(1\dots10)$ denotes the number of elements in $S_1$ through $S_{99}$
  but not $S_{100}$
  so we know that $f(1 \dots 1) + f(1 \dots 10) \equiv 0 \pmod{99}$.
  \ii \dots And so on.
\end{itemize}
So the problem condition means that $f(v)$ translates to the statement
\[ P(u): \qquad |u| \text{ divides } \sum_{v \supseteq u} f(v) \]
for any $u \neq 0\dots0$, plus one extra condition $f(1\dots1) > 0$.
And the objective function is to minimize the quantity
\[ A \coloneq \sum_{|v| \ge 50} f(v). \]
So the problem is transformed into an system of equations over $\ZZ_{\ge 0}$
(it's clear any assignment of values of $f(v)$
can be translated to a sequence $(S_1, \dots, S_{100})$ in the
original notation).

Note already that:
\begin{claim*}
  It suffices to assign $f(v)$ for $|v| \ge 50$.
\end{claim*}
\begin{proof}
  If we have found a valid assignment of values to $f(v)$ for $|v| \ge 50$,
  then we can always arbitrarily assign values of $f(v)$ for $|v| < 50$ by downwards
  induction on $|v|$ to satisfy the divisibility condition (without changing $M$).
\end{proof}
Thus, for the rest of the solution, we altogether ignore $f(v)$ for $|v| < 50$
and only consider $P(u)$ for $|u| \ge 50$.

\paragraph{Construction.}
Consider the construction
\[ f_0(v) = 2 |v| - 100. \]
This construction is valid since if $|u| = 100-k$ for $k \le 50$ then
\begin{align*}
  \sum_{v \supseteq u} f_0(v)
  &= \binom{k}{0} \cdot 100 + \binom{k}{1} \cdot 98 + \binom{k}{2} \cdot 96
  + \dots + \binom{k}{k} \cdot (100-2k) \\
  &= (100-k) \cdot 2^k = |u| \cdot 2^k
\end{align*}
is indeed a multiple of $|u|$, hence $P(u)$ is true.
In that case, the objective function is
\[ A = \sum_{i=50}^{100} \binom{100}{i} (2i-100) = 50\binom{100}{50} \]
as needed.
\begin{remark*}
  This construction is the ``easy'' half of the problem because it
  coincides with what you get from a greedy algorithm by downwards induction on $|u|$
  (equivalently, induction on $k = 100-|u| \ge 0$).
  To spell out the first three steps,
  \begin{itemize}
    \ii We know $f(1\dots1)$ is a nonzero multiple of $100$,
    so it makes sense to guess $f(1\dots1) = 100$.
    \ii Then we have $f(1\dots10) + 100 \equiv 0 \pmod{99}$,
    and the smallest multiple of $99$ which is at least $100$ is $198$.
    So it makes sense to guess $f(1\dots10) = 98$, and similarly guess $f(v) = 98$
    whenever $|v| = 99$.
    \ii Now when we consider, say $v= 1 \dots 100$ with $|v| = 98$, we get
    \[ f(1\dots100) + \underbrace{f(1\dots101)}_{=98} + \underbrace{f(1\dots110)}_{=98}
      + \underbrace{f(1\dots111)}_{=100} \equiv 0 \pmod{98}. \]
    we obtain $f(1\dots100) \equiv 96 \pmod{98}$.
    That makes $f(1\dots100) = 96$ a reasonable guess.
  \end{itemize}
  Continuing in this way gives the construction above.
\end{remark*}

\paragraph{Proof of bound.}
We are going to use a smoothing argument:
if we have a general working assignment $f$, we will mold it into $f_0$.

We define a \textbf{push-down on $v$} as the following operation:
\begin{itemize}
  \ii Pick any $v$ such that $|v| \ge 50$ and $f(v) \ge |v|$.
  \ii Decrease $f(v)$ by $|v|$.
  \ii For every $w$ such that $w \subseteq v$ and $|w| = |v| - 1$,
  increase $f(w)$ by $1$.
\end{itemize}
\begin{claim*}
  Apply a push-down preserves the main divisibility condition.
  Moreover, it doesn't change $A$ unless $|v| = 50$, where it decreases $A$ by $50$ instead.
\end{claim*}
\begin{proof}
  The statement $P(u)$ is only affected when $u \subseteq v$:
  to be precise, one term on the right-hand side of $P(u)$ decreases by $|v|$,
  while $|v|-|u|$ terms increase by $1$, for a net change of $-|u|$.
  So $P(u)$ still holds.

  To see $A$ doesn't change for $|v| > 50$,
  note $|v|$ terms increase by $1$ while one term decreases by $-|v|$.
  When $|v| = 50$, only $f(v)$ decreases by $50$.
\end{proof}
Now, given a valid assignment, we can modify it as follows:
\begin{itemize}
  \ii First apply pushdowns on $1\dots1$ until $f(1\dots1) = 100$;
  \ii Then we may apply pushdowns on each $v$ with $|v| = 99$ until $f(v) < 99$;
  \ii Then we may apply pushdowns on each $v$ with $|v| = 98$ until $f(v) < 98$;
  \ii \dots and so on, until we have $f(v) < 50$ for $|v| = 50$.
\end{itemize}
Hence we get $f(1\dots1) = 100$ and $0 \le f(v) < |v|$ for all $50 \le |v| \le 100$.
However, by downwards induction on $|v| = 99, 98, \dots, 50$, we also have
\[ f(v) \equiv f_0(v) \pmod{|v|} \implies f(v) = f_0(v) \]
since $f_0(v)$ and $f(v)$ are both strictly less than $|v|$.
So in fact $f = f_0$, and we're done.

\begin{remark*}
  The fact that push-downs actually don't change $A$
  shows that the equality case we described is far from unique:
  in fact, we could have made nearly arbitrary sub-optimal
  decisions during the greedy algorithm and still ended up with an equality case.
  For a concrete example, the construction
  \[
    f(v) = \begin{cases}
      500 & |v| = 100 \\
      94 & |v| = 99 \\
      100-2|v| & 50 \le |v| \le 98
    \end{cases}
  \]
  works fine as well (where we arbitrarily chose $500$ at the start,
  then used the greedy algorithm thereafter).
\end{remark*}