Wyrzuć te ify, bo nie są do niczego potrzebne. Wydaje mi się, że problem stanowi metoda. Podaj sobie jakiś duży zakres liczb (1-1000000000). Program będzie działał za wolno co tłumaczy wyskakiwanie na spoju komunikatu "przekroczono zakres czasu". Jeżeli masz podany dzielnik 2 i np zakres 1 - 1000 to jesteś w stanie określić ile tam jest liczb podzielnych przez 2. Nie musisz za każdym razem sprawdzać każdej liczby. Tylko problem jak przerobić to pod 3 liczby... Tyle podpowiedzi ;)
PS. Często używasz typu unsigned long long int - może warto skorzystać z typedef i nazwać sobie krócej ten typ?
typedef unsigned long long int ulong;
ulong a,b,c;