Неравенство. Не всегда выводит ответ
Суть задания в том чтобы посчитать кол-во целых чисел N из диапозона [L, R] удовлетворяющих неравенству
{N / p} + {N / q} + {N / r} <= N
где {X / Y} - это целая часть с округлением вверх
Входные данные содержат пять целых чисел p, q, r, L, R (1 ≤ p, q, r ≤ 10, 1 ≤ L ≤ R ≤ 10^18).
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int main()
{
long long p, q, r, L, R;
cin >> p >> q >> r >> L >> R;
long long count = 0;
if (R - L < 1000000)
{
for (long long i = L; i <= R; i++)
{
if (ceil((double)i / p) + ceil((double)i / q) + ceil((double)i / r) <= i)
{
count++;
}
}
cout << count;
}
else
{
for (long long i = L; i <= R; i++)
{
if (ceil((double)i / p) + ceil((double)i / q) + ceil((double)i / r) <= i)
{
count = i;
break;
}
}
cout << R - count + 1;
}
}
Суммировать очень долго я подумал , поэтому если у нас огромная разница между L и R мы должны найти ближайший элемент который удовлетворяет условию и тогда все последующие N+1 будет тоже удовлетворять. Проблема в том , что так происходит не всегда. Например если числа будут p = 3, q = 3, r = 3, то не получится