(no subject)

Friday, 30 March 2012 14:51
gns_ua: (Default)
[personal profile] gns_ua
> задача о разработке метода определения делимости числа на 15, при условии, что запись числа настолько длинная, что не влезает ни в один целочисленный тип (т.е., грубо говоря, делить напрямую нельзя).

http://smartsourcing.ru/blogs/kurilka/1364

Очевидно, что необходимо и достаточно выполнение двух условий:

а) последняя цифра 5 или 0

б) сумма цифр (aka X mod 9) делится на три. Свойста этой штуки таковы, что на самом деле полную сумму считать не нужно: достаточно складывать цифры по одной, и как только результат становится двузначным - останавливаться, делить на 9 с остатком, продолжать.

def mod9(n):
    sum = 0
    for x in n:
        sum+=int(x)
        if sum>20: sum = sum % 9
    return sum

# x задано как строка
if x[-1] in ('0', '5') and mod9(list(x)) % 3 == 0:
    print "yes'
else:
    print "no"


(вообще, порог 20 здесь произвольный. Можно и 100 взять - чтоб не слишком часто делить)

2012-04-01 19:02 (UTC)
- Posted by [identity profile] tassadar-ha.livejournal.com
Не уверен, все трансляторы-компиляторы нынче отлично оптимизируют код (я рассказывал тебе пример про этот наш КПИ и Делфи?). Подозреваю, в библиотеках реализован какой-то более эффективный алгоритм перевода систем счисления, сравнительно с тупым делением.

2012-04-01 19:35 (UTC)
- Posted by [identity profile] gns-ua.livejournal.com
> Не уверен, все трансляторы-компиляторы нынче отлично оптимизируют код

На питоне может проверим?:)

Я тоже рассказывал, про ЗИЭИТ и дельфи/ассемблер :)

> Подозреваю, в библиотеках реализован какой-то более эффективный алгоритм перевода систем счисления, сравнительно с тупым делением.

Для частных случаев, возможно. Но я тут немного погуглил - говорят что до O(l log l) в лучшем случае, по сравнению с схемой Горнера O(l^2). Но нам нужен только собственно остаток от деления на первую степень, а его можно получить делением тупо в столбик (если у нас уже есть десятичная строка) - O(l), как и в моём варианте для частного случая, с точностью до коэффициента.

2012-04-01 19:41 (UTC)
- Posted by [identity profile] tassadar-ha.livejournal.com
Давай проверим, только, чур, без рекурсий - Питон, как ты знаешь, фигово с ними работает :)

Profile

gns_ua: (Default)
gns_ua

April 2017

M T W T F S S
     12
3456789
10111213141516
17181920212223
24252627282930

Expand Cut Tags

No cut tags

Style Credit