Так как вы хотите, чтобы сумма последовательности была чуть больше 10000. Так что это AP (Арифметическая прогрессия).Таким образом, мы можем реализовать формулу для суммы AP.
т.е. S = n * [2a + (n-1)*d] / 2
проверьте ниже ссылку для деталей:
http://en.wikipedia.org/wiki/Arithmetic_progression
Put a=1
, d=1
иS>10000
давайте возьмем S=10000
n, мы должны выяснить
уравнение становится n^2 + n - 20000 = 0
, что дает n = 141
(приблизительно принимая значение + ve sq. root)
Пусть n = X для произвольной задачи.поэтому мы можем запустить следующий цикл
sum = X * [2a + (X-1) d] / 2;
if(sum <= 10000)
while(sum < 10000 && (++X))
sum = X * [2a + (X-1)d] / 2;
else
while(sum > 10000 && (--X))
sum = X * [2a + (X-1)d] / 2;
cout << "We should continue the sequence up to" << X;
Вышеприведенный цикл займет не более 3 итераций, чтобы найтиX.
это уменьшит накладные расходы на запуск цикла.например, если у вас есть большая сумма, например, вместо 10000, пусть она будет 100000000, тогда вы увидите огромную разницу во времени выполнения.