Форум » Обработка целых чисел » Задача 17 (№47) » Ответить

Задача 17 (№47)

Осипова: Задача №47, тренировочные задания с сайта Полякова (Задание 17 ЕГЭ): 47) (А. Куканова) Рассматривается множество целых чисел, принадлежащих числовому отрезку [2055; 9414], которые удовлетворяют следующим условиям: − сумма последних двух цифр не равна 5; − не кратны 4, 5 и 41. Найдите минимальное из таких чисел и последние 3 цифры произведения всех таких чисел. Решение на Паскаль в качестве второго ответа дает 0: var count, n, max, k, sum, min: integer; p:longint; begin count:= 0; p:=1; min:=9415; for n:=9414 downto 2055 do if ((n mod 10)+((n div 10) mod 10) <>5) and((n mod 4<>0) and(n mod 5<>0) and (n mod 41<>0)) then begin min:=n; p:=p*n; writeln (p); end; writeln(min, ' ', p ) end. Тип данных для переменной Р дает 0. На Python второй ответ дает 768. Это неверно. Мое решение: # -*- coding: utf-8 -*- p=1 k=9415 for n in range(9414,2056,-1): if ((n%10+n//10%10) !=5) and (n%4 !=0) and (n% 5!=0) and (n%47 !=0): k=n p=p*n print ( k, " ", sep="", end="" ) print (p , " ", sep="", end="" ) Подскажите, как получить верный ответ: 3 последние цифры произведения всех таких чисел?

Ответов - 7

Поляков: Осипова пишет: Подскажите, как получить верный ответ: 3 последние цифры произведения всех таких чисел? [pre2] p = 1 k = 9515 for n in range(9414,2056,-1): if ((n%10+(n//10)%10) !=5) and (n%4 !=0) and (n% 5!=0) and (n%41 !=0): k = n p = (p*n) % 1000 print( k, " ", sep="", end="" ) print( p, " ", sep="", end="" )[/pre2]

Осипова: Произведение получается слишком большим. В Паскале типа longint не хватает. В Питоне также не хватает разрядной сетки для вывода ответа.

Поляков: Осипова пишет: Произведение получается слишком большим. В Паскале типа longint не хватает. А вы посмотрите внимательно на приведенное решение. Вам само число не нужно, вам нужны последние три его цифры. В Питоне также не хватает разрядной сетки для вывода ответа. А поподробнее про разрядную сетку в Питоне где почитать?


Саша123: задача 17(48) [pre2] Max = 0 c = 0 Pro = 1 for n in range(1985, 8528+1): if (str(n)[-1] + str(n)[-2]) != 6 and n%2 != 0 and n%7 != 0 and n%47 != 0: c = n Pro = Pro * n Max = max(Max, c) print(Max, Pro%1000) [/pre2] 8527, 125 Где ошибка?

Поляков: Саша123 пишет: (str(n)[-1] + str(n)[-2]) != 6 1) Вы складываете символьные строки? 2) по условию суммы двух последних цифр РАВНА 6.

Artem31: Поляков пишет: Не могу понять как работает строчка p = (p*n) % 1000 . Она умножает последние 3 числа. Но почему такая запись и как она работает?

Поляков: Artem31 пишет: Не могу понять как работает строчка p = (p*n) % 1000 Умножаем p на n и сразу оставляем только 3 последние цифры. Чтобы не получилось очень большого числа.



полная версия страницы