Подсчитать количество чисел в заданном диапазоне куб которых оканчивается на 4 или 9
Количество чисел
На вход программе подаются два целых числа a и b (a≤b). Напишите программу, которая подсчитывает количество чисел в диапазоне от a до b включительно, куб которых оканчивается на 4 или 9.
Формат входных данных
На вход программе подаются два целых числа a и b (a≤b).
Формат выходных данных
Программа должна вывести одно целое число в соответствии с условием программы. Примечание. Куб числа aa – это его третья степень a^3a.
Sample Input 1:
1
10
counter = 0
for i in range(int(input()), int(input())):
if i % 10 == 4:
counter = counter + 1
print(counter)
else:
i % 10 == 9
counter = counter + 1
print(counter)
Ответы (4 шт):
Пояснения насчет кубов: 3 в кубе= 27, оканчивается на семь; 4 в кубе= 64, оканчивается на 4 - подходит нам по условию задачи. Нам надо "выловить" эту конечную цифру числа, проверить (вдруг она является 4-кой или 9-кой) и подсчитать количество таких случаев в заданном диапазоне.
Вот кубы первых 9 чисел (можете сами себе такой цикл составить, чтобы на них посмотреть и лучше понять, что просят сделать):
1**3 = 1
2**3 = 8
3**3 = 27
4**3 = 64
5**3 = 125
6**3 = 216
7**3 = 343
8**3 = 512
9**3 = 729
Если обратить внимание на кубы чисел, которые заканчиваются на 4 и 9, то можно увидеть закономерность - если число заканчивается на 4 или на 9, то и куб этого числа будет заканчиваться на ту же цифру:
In [81]: [(i, i**3) for i in range(70) if (i**3) % 10 in (4,9)]
Out[81]:
[(4, 64),
(9, 729),
(14, 2744),
(19, 6859),
(24, 13824),
(29, 24389),
(34, 39304),
(39, 59319),
(44, 85184),
(49, 117649),
(54, 157464),
(59, 205379),
(64, 262144),
(69, 328509)]
поэтому ответ можно получить аналитически:
def f(a, b, digit):
a = a // 10 * 10 + digit
b = b // 10 * 10 - (10 - digit)
return (b - a + 10) // 10
def calc(a, b):
return f(a, b, 4) + f(a, b, 9)
a, b = 123, 321
res = calc(a, b)
результат:
In [185]: res
Out[185]: 40
проверка:
In [186]: len([(i, i**3) for i in range(a, b+1) if (i**3) % 10 in (4,9)])
Out[186]: 40
Может сразу прийти такое решение в голову:
a, b = int(input()), int(input())
counter = 0
for i in range(a,b+1):
if i ** 3 % 10 == 4 or i ** 3 % 10 == 9:
counter += 1
print(counter)
Но если внимательно вникнуть в задание, то можно понять, что нет смысла напрягать компьютер лишний раз и можно не возводить в куб числа:
a = int(input())
b = int(input())
counter = 0
for i in range(a, b + 1):
if i % 10 == 4 or i % 10 == 9:
counter += 1
print(counter)
По соседству уже заметили что если куб числа заканчивается на четыре или девять то и само число оканчивается на четыре или девять.
По соседству также предложили считать количество таких чисел аналитически, только чуть-чуть ошиблись в реализации.
Сколько чисел d, 0 ≤ d < n оканчивается на цифру четыре? k4(n) = ⌊d+5/10⌋.
Сколько чисел d, n1 ≤ d ≤ n2 оканчивается на цифру четыре? k4(n1, n2) = k4(n2 + 1) - k4(n1).
Аналогичные формулы для девятки: k9(n) = ⌊d/10⌋, k9(n1, n2) = k9(n2 + 1) - k9(n1)
Что приводит к такой программе:
def k_(d, n):
return (n + 9 - d) // 10
def k(d, n1, n2):
return k_(d, n2 + 1) - k_(d, n1)
n1, n2 = map(int, input().split())
print(k(4, n1, n2) + k(9, n1, n2))