Вот алгоритм который позволяет определить количество делимых на
чисел на отрезке
Код:
int divNum(int a, int l, int divisor)
{
int i = 1;
// find first divisor in set
while ((a+i) % divisor)
{
if (++i > l)
return 0;}
return (l-i+1)/divisor + 1;
}
Даже если бы в вашей функции не было ошибки (она есть, см. далее), хочу посоветовать...
Не нужно решать совсем «в лоб» такие чисто алгоритмические задачи. 5 минут посидите в следующий раз с бумагой и карандашом, прежде чем бросаться писать
натуральный брутфорc.И вуаля - время выполнения функции из
становится
Вот мой вариант функции
Код:
int divNum_true(int x, int y, int d)
{
return y/d-x/d + !(x%d);
}
В ваших обозначениях это интервал
, то бишь
и
Собственно, корректность своей формулы не проверял и не доказывал (на глаз верная, но чёрт его знает), ведь главное - сверить её с вашей.
Уже для
и
моя даёт правильное число делимых
тогда как ваша выводит
.
Если заинтересуетесь моей формулой, то с удовольствием расскажу, как получил. Но там всё очень тривиально.