По идее надо бы задать формулу кусочно для разных n, но можно все собрать в одну формулу как-то так:
(2-n)(3-n)/2*f1(n) + (n-1)(3-n)*f2(n) + (n-1)(n-2)/2*f3(n)
Далее
f1(n) = b-a+1
Для нахождения f2 и f3 можно сдвинуть левую границу вправо до первого числа нужной четности, а правую границу - влево. Потом уже зная, что 2 крайних числа в промежутке между a' и b' берутся, то фромула будет (b'-a')/2+1.
Для такого сдвига надо будет смотреть на четность a и b и четность n.
В итоге:
f2(n) = ((b-b%2)-(a+a%2))/2+1
f3(n) = ((b-1+b%2)-(a+1-a%2))/2+1
Можно f2 и f3 объединить используя n%2 и операцию xor: если четность a или b не такая же как у n, то надо границу сдвигать (вычесть/прибваить 1). Иначе надо вычесть/прибавить 0. xor как раз равен 1 при неравнестве и 0 при совпадении четностей.
f23(n) = ((a+(a%2 ^ n%2))-(b-(b%2)^(n%2)))/2+1
Итоговая формула:
(2-n)(3-n)/2*(b-a+1) + ((n-1)(3-n) + (n-1)(n-2)/2)*(((a+(a%2 ^ n%2))-(b-(b%2)^(n%2)))/2+1)
А еще, если пользоваться битовыми функциями, то можно вместо
(n-1)(3-n) + (n-1)(n-2)/2
использовать (n & 2)/2, в вместо первой скобки (1 - (n & 2)/2)
Формула правильно возвращает 0, если чисел в промежутке нет. Правда, она не работает, если a > b.