Задано натуральное число N. Требуется написать программу, которая находит количество натуральных чисел, не превышающих N и не делящихся ни на одно из чисел 2, 3, 5.
Ограничения 1 <= N <= 10^9
Я попытался сделать задачу глупым перебором, но как Вы сами понимаете это глупо... Так что подскажите мне другой метод решения)
проходить в цикле и проверять условие
j:=0;
for i:=1 to n do
if (i mod 2 <> 0) and (i mod 3 <> 0) and (i mod 5 <> 0) then inc(j);
Я же ведь говорю что глупым перебором задачу глупо решать!!! Возьмите у себя число 1 000 000 и посмотрите как долго она прокручиваться будет!
Я бы хотел более быстрым методом сделать...
Сергей Меркурьев, а не надо считать все подряд
Можешь воспользоваться тем фактом, что в каждой тридцатке чисел, тех чисел, которые тебя устраивают (не делящихся на 2, 3 или 5) ровно 8 штук: 1, 7, 11, 13, 17, 19, 23, 29... То есть,
j := 8*(N div 30);Выдаст тебе результат мгновенно...
for i := 1 to (N mod 30) do
if (i mod 2 <> 0) and (i mod 3 <> 0) and (i mod 5 <> 0) then inc(j);
writeln(j);
Действительно!! А я то тут мудрил искал закономерность совсем в другом))) Оказалось всё так просто)) Спасибо!
Слушайте, а может быть ещё какое-нибудь решение данной задачи?
Более быстрое - вряд ли, хотя можно забить эти 8 чисел в массив и проверять на сами числа, без деления на 2, 3, 5. Но насколько это ускорит алгоритм? Мелочи... Или речь о совершенно других решениях (кроме перебора)?
Да в принципе это практически ничего не даст... Ещё раз спасибо.
Мне кажется что формулой считать бессмысленно так, как тут то и не найти такой закономерности))
Если учитывать что почти в каждой десятке (может через один, может через два) встречаются на конце чисел вот такие цифры - 1 3 7 9...
Но во многих десятках встречается только 1 и 7 или 3 и 9... Так что (как мне кажется) формулу выводить здесь сложно...
В принципе всем спасибо за помощь)