Это пахнет домашним заданием, так что только намек.
Вам не нужно рассчитывать GCD здесь. Если вы можете разложить n (даже самым грубым способом попытаться разделить на каждое нечетное число меньше 2 ^ 16), то вы можете просто посчитать числа, которые не делятся на множители n.
Обратите внимание, что в 32-битном числе будет не более 10 факторов (нам не нужно помнить, сколько раз данное простое число используется при факторизации).
Как это сделать? Попробуйте подсчитать число, не являющееся взаимоисключающим, используя принцип включения-исключения. Вам нужно будет проверить не более 1023 подмножеств простых чисел, для каждого подмножества вам нужно вычислить, сколько умножений находится в диапазоне, который является постоянным временем для каждого подмножества.
В любом случае, мой код работает в кратчайшие сроки:
liori:~/gg% time ./moje <<< "1 1003917915 1 1003917915"
328458240
./moje <<< "1 1003917915 1 1003917915" 0,00s user 0,00s system 0% cpu 0,002 total