Нахождение наибольшей степени 10, которая равномерно делится на список чиселPython

Программы на Python
Ответить Пред. темаСлед. тема
Гость
 Нахождение наибольшей степени 10, которая равномерно делится на список чисел

Сообщение Гость »


Я пытаюсь уменьшить набор чисел для использования в алгоритме суммирования подмножеств DP. (Он взрывается, если числа слишком велики.) В частности, мне нужно найти наибольшую степень 10, которую я могу разделить на числа без потери точности. У меня есть рабочая процедура, но, поскольку она часто выполняется в цикле, я надеюсь, что есть более быстрый способ, чем метод грубой силы, который я придумал. Мои числа оказались десятичными.
из десятичного импорта Десятичный импорт математики def крупнейших_common_power_of_10(числа: список[десятичный]) -> int: """ Определите наибольшую степень 10 в списке чисел, которая будет делиться на все числа. без потери значащей цифры слева от десятичной точки """ мин_экспонента = число с плавающей запятой('inf') для числа в числах: если число != 0: # Подсчитаем количество конечных нулей в числе показатель степени = 0 в то время как число % 10 == 0: число //= 10 показатель степени += 1 мин_экспонента = мин(мин_экспонента, показатель) # Наибольшая степень 10 равна 10, возведенной в min_exdependent вернуть int (мин_экспонента) decimal_numbers = [Десятичный("1234"), Десятичный("5000"), Десятичный("200")] результат = наибольшая_общая_степень_10(десятичные_числа) утверждать (результат == 0) decimal_numbers = [Десятичный (470_363_000.0000), Десятичный (143_539_000.0000), Десятичный (1_200_000.0000)] результат = наибольшая_общая_степень_10(десятичные_числа) утверждать (результат == 3) делитель = 10**результат # Последующая обработка может использовать Scaled_list Scaled_list = [x/делитель x в десятичных_числах] Assert(scaled_list == [Decimal('470363'), Decimal('143539'), Decimal('1200')]) reconstituted_list = [x * делитель для x в масштабируемом_списке] утверждать (восстановленный_список == десятичные_числа)
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»