HackerRank - Code Sprint 5 - big commit of attempted problems

IsFibo - is a very large number a Fibonacci number. The trick is that
although BigInteger gives you arbitrary precision arithmetic you
still need your own square root routine.

Matrix Tracing - how many paths are there through a very large
rectangular grid, from the top left, where you can only move down and
right. The standard answer involves dynamic programming, but this is
potentially a 10 ** 6 by 10 ** 6 grid, ruling out any sort of
iterative O(n) solution. An analytic solution is obvious after
writing out examples, but crucially requires factorials. One requires
a factorial routine that can efficiently calculate a factorial up to
2 * 10 ** 6. Prime factorization of large factorials is an obvious
way to save a bit of time, but instead of a naive product of the
remaining prime factors, one also relies on exponentiation by squaring.
Java is required, Python was too slow.

Special Multiple - find the smallest number that is composed of nines
and zeros that is a multiple of n <= 500. Use a BitSet to iterate
through all combinations.

Not committed is my almost-passing solution to the "A Story of People
and Places". Although I know an NLP, or at least NLP-inspired, solution
is best, a cute hammer is to download the full 250MB database from
GeoNames and build a Bloom Filter of all places on Earth from their
crowd-sourced open-source database. This is remarkably effective! The
trick to uploading the Bloom Filter at all is to pickle, zlib, then
base64 it as a giant 2MB string literal. I have committed a very
rough script that will help you along this path.