var left = (first.Value >> 1) + (first.Value & 1);
first.Value >> 1
(first.Value & 1)
var right = first.Value - left--;
left--
при вычислении право.// начальные значения
P = 1;
k = 2;
f=1;
i=1
t=1;
// далее цикл пока i<2*k+1=2*2+1=5
// таким образом
f = 1*5! = 1*120=120
// далее цикл пока i<k-1=2-1=1
// тоесть так как i = 1 вычисления в этом цикле не производятся
// таким образом
t=1;
// далее получаем
r = 120 / 1 = 120 // об этом вам написал @myjcom.
// ну а далее получаем завершение вычислений если r >= M
// то есть если вы введете М меньше чем 120 то вы получите всего 1 цикл вычислений.