А в чём проблема? Перебор тривиальный.
for (i = 1; i < 10000; i++) {
for (j = i+1; j <= 10000; j++) {
// пара [i, j]
}
}
Другое дело, что при 10000 чисел вы получите 10000*9999/2 = 49'995'000 пар.
То есть, вам надо ускорять обработку каждой пары и распараллеливать вычисления.