for(long long j=1;j<sqrt(m);++j){
kol += 2*(m/j) - m/(j+1) ;
}
for(long long j=1;j<sqrt(n-1);++j){
kol -= 2*((n-1)/j) - (n-1)/(j+1) ;
}
for n = a .. b:
for divisor = 1.. n
if n % divisor == 0: ++ans
for divisor = 1.. n:
for n = a .. b:
if n % divisor == 0: ++ans
kol+= m/j-(n-1)/j
то понял? Дальше разбиваем на 2 отдельные суммы. Одну с m, другую с n-1.Дальше, слагаемые с j до корня считаем просто тупо циклом. А оставшиеся слагаемые группируем. Это тот же прием, что и в самом начале сделали. Вместо счета суммы чисел, считаем, а сколько раз каждое число в сумме участвует.
И я там накосячил, надо же "сколько раз число в сумме" домножить на само число. Что-то вроде должно быть
kol += (m/j) +j*(m/j- m/(j+1)) ;