Я большой сторонник одного цикла для каждой функции. Это очень хороший пример для этого. Ваш внутренний цикл проверяет, является ли число простым, поэтому на самом деле оно должно быть функцией само по себе:
bool is_prime(int n);
int sum_primes_between(int n1, int n2)
{
int sum = 0;
for (; n1 <= n2; n1++)
{
if (is_prime(n1))
sum += n1;
}
return count;
}
Теперь не только легче читать, но и лучше тестировать отдельные части кода. Вы можете проверить правильность is_prime
и после этого проверить правильность num_primes_between
. Если бы вы пошли по этому маршруту с самого начала, у вас даже не было бы ошибки, с которой вы сейчас столкнулись, обнаружив, что число простое.
А вот еще более аккуратное решение с range-v3 :
using namespace ranges;
bool is_prime(int n);
int sum_primes_between(int n1, int n2)
{
return accumulate(view::ints(n1, n2 + 1) | view::filter(is_prime), 0);
}