Поломайте-ка голову ) Берем произвольное четырехбайтовое (32 бит) число. Представляем его как сумму других чисел, сумма факториалов которых дает начальное число, которое мы таким образом пытаемся представить. И, судя по http://math-prosto.ru/?page=pages/calculators/factorial_online.php , каждое из этих составляющих будет не больше 12 (т.е. занимать не более 4 бит, 13! = 6 227 020 800 и это уже больше 232), т.о. таких чисел максимум мы можем найти 8 (8×4=32 бит), ежели мы не смогли представить начальное число как меньше 8 таких маленьких чисел, "сжатие" не удалось. Т.е., разбираем на составные, к примеру, число 100500999 (32 бит) = 7!+8!+2!, например. Эти 3 числа каждое макс по 4 бита, соот-но, 4×3=12 бит они заняли, условно, места. В ЛолПаке я представлял начальное число как сумму других чисел, которые возводил в (фиксированную) степень. Не получилось ужимать. 12! = 479 001 600, для "описания" 232 таких чисел уже нужно ~9.
Я понимаю что эту "статью" надо было дополнять кодом ещё на момент написания,но у меня возникли некоторые обстоятельства Код на FASM Код (ASM): format PE console entry runpoint include 'win32axp.inc' section '.text' code readable executable runpoint: xor eax,eax xor edx,edx xor ebx,ebx prоcess_bytes: mov al,[group_byte+edx] and al,11b or bl,al shl bl,2 inc edx cmp edx,4 jz endprogram jmp prоcess_bytes endprogram: invoke ExitProcess,0 section '.data' data readable writeable group_byte db 0xC8,0xD2,0xF1,0xA9 section '.idata' import data readable writeable library kernel32,'kernel32.dll' import kernel32,\ ExitProcess,'ExitProcess'