?

Log in

No account? Create an account
nyaload

Журнал Пушыстого

Журнал Пушыстого

Previous Entry Share Next Entry
6174 Капрекара
nyaload
_winnie
число 6174, есть в нём что-то мистическое и тайное.
Возмите любое четырехзначное число с неодинаковыми цифрами, переставьте цифры так что бы получилось наименьшее и наибольшие числа, и вычтите. Не более чем через 7 шагов последовательность сойдётся к 6174, и никто не знает почему.

Например: 1234 -> 8352 -> 6174 -> ....

Информация: http://en.wikipedia.org/wiki/Kaprekar_constant

Python:
i = 1234
for _ in range(10):
   x = ''.join(sorted('%04i' % i))
   i = int(x[::-1]) - int(x)
   print i

upd: подробное описание: http://plus.maths.org/content/os/issue38/features/nishiyama/index
Tags:


  • 1

Я Ж БУКВАЛЬНО СЕГОДНЯ РЕТИВИТИЛ, БЛЯДЬ

http://plus.maths.org/content/os/issue38/features/nishiyama/index

The digits of any four digit number can be arranged into a maximum number by putting the digits in descending order, and a minimum number by putting them in ascending order. So for four digits a,b,c,d where

9 ≥ a ≥ b ≥ c ≥ d ≥ 0

and a, b, c, d are not all the same digit, the maximum number is abcd and the minimum is dcba.

We can calculate the result of Kaprekar's operation using the standard method of subtraction applied to each column of this problem:
	a 	b 	c 	d
- 	d 	c 	b 	a
—————————————————————————————————
	A 	B 	C 	D

which gives the relations
D = 10 + d - a (as a > d)
C = 10 + c - 1 - b = 9 + c - b (as b > c - 1)
B = b - 1 - c (as b > c)
A = a - d

for those numbers where a>b>c>d.

A number will be repeated under Kaprekar's operation if the resulting number ABCD can be written using the initial four digits a,b,c and d. So we can find the kernels of Kaprekar's operation by considering all the possible combinations of {a, b, c, d} and checking if they satisfy the relations above. Each of the 4! = 24 combinations gives a system of four simultaneous equations with four unknowns, so we should be able to solve this system for a, b, c and d.

It turns out that only one of these combinations has integer solutions that satisfy 9 ≥ a ≥ b ≥ c ≥ d ≥ 0. That combination is ABCD = bdac, and the solution to the simultaneous equations is a=7, b=6, c=4 and d=1. That is ABCD = 6174. There are no valid solutions to the simultaneous equations resulting from some of the digits in {a,b,c,d} being equal. Therefore the number 6174 is the only number unchanged by Kaprekar's operation.

Re: Я Ж БУКВАЛЬНО СЕГОДНЯ РЕТИВИТИЛ, БЛЯДЬ


Не пугайся так :) Я тоже пришёл на эту статью из твиттера, скорее всего с http://twitter.com/AlgebraFact

Re: Я Ж БУКВАЛЬНО СЕГОДНЯ РЕТИВИТИЛ, БЛЯДЬ

А КОГО, ПО-ТВОЕМУ, Я РЕТВИТИЛ?!?!?!?!СЕМЬДЕСЯТОДИН

Re: Я Ж БУКВАЛЬНО СЕГОДНЯ РЕТИВИТИЛ, БЛЯДЬ

Хм, я думаю AlgebraFact и ещё несколько сотен пользователей :)
Мы оба фолловим AlgebraFact. Насколько я знаю, если в ленте есть оригинал, то ретвит не показывается.
Похоже, тебе факт про 6174 тоже показался интересным.

Re: Я Ж БУКВАЛЬНО СЕГОДНЯ РЕТИВИТИЛ, БЛЯДЬ

Кстати, а почему столько капса, и к чему данная вырезка из статьи? В ней только лишь находится неподвижная точка этого преобразования, но не объясняется почему все числа сходятся к нему.

Re: Я Ж БУКВАЛЬНО СЕГОДНЯ РЕТИВИТИЛ, БЛЯДЬ

Ну, вообще, сходиться оно будет или к замкнутому кольцу, или к неподвижной точке. Надо придумать свойство для кольца, которое показывает, что для 4-значных чисел оно не будет существовать.

А капс, он для придания экспрессии, да.

Re: Я Ж БУКВАЛЬНО СЕГОДНЯ РЕТИВИТИЛ, БЛЯДЬ

Если придумаешь для n = (n%2==0)?(n/2):(3*n+1), не забудь рассказать об этом миру!

Хм.

Любопытно.

Написал код для проверки.
Оказывается, для чисел из 3 цифр то же выполняется. Там получается число 495.

Вот код:

from itertools import product
from pprint import pprint

nums = '0123456789'
digits = 3
limit_of_iterations = 10

excluded_numbers_list = []
fit_numbers_set = set([])
all_numbers_set = set([])

def combinations_with_replacement(iterable, r):
# combinations_with_replacement('ABC', 2) --> AA AB AC BB BC CC
# This function is in the module itertools from Python 2.7
pool = tuple(iterable)
n = len(pool)
for indices in product(range(n), repeat=r):
if sorted(indices) == list(indices):
yield tuple(pool[i] for i in indices)

def int_to_list(combination_int):
L = list(str(combination_int))
if len(L) < digits:
L.extend(list('0'*(digits-len(L))))
return L

def list_to_str(combination):
return ''.join(sorted(combination))

for combination in combinations_with_replacement(nums,digits):
if len(set(combination)) == 1: #two or more digits have to be different
combination_int = int(list_to_str(combination))
excluded_numbers_list.append(combination_int)
print("--: {0:0{1}} doesn't fit the properties".format(combination_int,digits))
print("\n")
continue
print("In: {0}".format(list_to_str(combination)))
all_numbers_set.add(combination)
combination_list = combination
last_int = -1
for i in xrange(1,limit_of_iterations):
combination_str = list_to_str(combination_list)
combination_int = int(combination_str[::-1]) - int(combination_str)
if combination_int == last_int:
fit_numbers_set.add(combination)
print("{0:2}->{1:0{2}}".format(i,combination_int,digits))
break
last_int = combination_int
print("{0:2}: {1:0{2}}".format(i,combination_int,digits))
combination_list = int_to_list(combination_int)
print("\n")

print("Excluded numbers:")
pprint(excluded_numbers_list)

print("Unfit numbers:")
pprint(all_numbers_set - fit_numbers_set)

  • 1