  Approximate integer programming is the following: For a convex body $K
\subseteq \mathbb{R}^n$, either determine whether $K \cap \mathbb{Z}^n$ is
empty, or find an integer point in the convex body scaled by $2$ from its
center of gravity $c$. Approximate integer programming can be solved in time
$2^{O(n)}$ while the fastest known methods for exact integer programming run in
time $2^{O(n)} \cdot n^n$. So far, there are no efficient methods for integer
programming known that are based on approximate integer programming. Our main
contribution are two such methods, each yielding novel complexity results.
  First, we show that an integer point $x^* \in (K \cap \mathbb{Z}^n)$ can be
found in time $2^{O(n)}$, provided that the remainders of each component $x_i^*
\mod{\ell}$ for some arbitrarily fixed $\ell \geq 5(n+1)$ of $x^*$ are given.
The algorithm is based on a cutting-plane technique, iteratively halving the
volume of the feasible set. The cutting planes are determined via approximate
integer programming. Enumeration of the possible remainders gives a
$2^{O(n)}n^n$ algorithm for general integer programming. This matches the
current best bound of an algorithm by Dadush (2012) that is considerably more
involved. Our algorithm also relies on a new asymmetric approximate
Carath\'eodory theorem that might be of interest on its own.
  Our second method concerns integer programming problems in equation-standard
form $Ax = b, 0 \leq x \leq u, \, x \in \mathbb{Z}^n$ . Such a problem can be
reduced to the solution of $\prod_i O(\log u_i +1)$ approximate integer
programming problems. This implies, for example that knapsack or subset-sum
problems with polynomial variable range $0 \leq x_i \leq p(n)$ can be solved in
time $(\log n)^{O(n)}$. For these problems, the best running time so far was
$n^n \cdot 2^{O(n)}$.
