Неравенство. Не всегда выводит ответ

Суть задания в том чтобы посчитать кол-во целых чисел 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, то не получится


Ответы (0 шт):