Как стать автором
Обновить

Комментарии 69

тривиальная задача.
Уважаемые минусующие!
Идите лесом!
Задачка решается на БУМАГЕ, за 3 МИНУТЫ, имеет множество решений, так же как и множество вариантов этой задачи!
тоесть задача может быть например не abcde * 2 = bcdea, а abcde * 3 = bcdea или *5, и тоже будет иметь решение.

Вот одно из чисел — которое я получил на БУМАГЕ за 2 минуты.

105 263 157 894 736 842
Реально круто. А можете объяснить ход решения?
круто.
но у вас получилось число в два раза больше, а по условию нужно получить в два раза меньше
НЛО прилетело и опубликовало эту надпись здесь
ПОчему не удовлетворяет? abcde это только чтобы принцип был понят, а так мог я написать и abc и abcdefghikl
Да-да-… я ошибся… Извиняйте. число для «минуса» будет 2 105 263 157 894 736 842
210 526 315 789 473 684
НЛО прилетело и опубликовало эту надпись здесь
Это решение совсем другой задачи
abcde * 2 = eabcd
Это решение обоих задач:

210 526 315 789 473 684 = 2 * 105 263 157 894 736 842
210 526 315 789 473 684 = 421 052 631 578 947 368 / 2
Ошибочка вышла, ага =(
Это не решение. Вернее, как справедливо заметили выше, решение не той задачи
210 526 315 789 473 684 * 2 = 4210 526 315 789 473 68 (на конце не 2, как должно быть)
В общем то в самом посте ошибка, пример abcde * 2 = bcdea не верен по постановке задачи.

Задача же звучит как раз как abcde * 2 = eabcd.
Угу, я внизу написал.
Как Вы собственно ниже и заметили =)
Ну abcde можно представить как 10000a+1000b+100c+10d+e
bcdea как 10000b+1000c+100d+10e+a
Получили
20000a+2000b+200c+20d+2e=10000b+1000c+100d+10e+a
19999a-8000b-800c-80d-8e=0
Получается диофантово уравнение, а в случае с произвольной разрялностью, оно похоже не имеет решения в общем виде.
НЛО прилетело и опубликовало эту надпись здесь
а что должно быть понятно?

Решения-то нет потому, что числа вида 199...99 не делятся не 8, сколько бы 9-ок в них не было.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Если задача про дяситичную систему, то решения нет.
Действительно, по условию задачи должно быть:
10*a+b = 2*(b*10^n+a), где b — цифра, a — любое число, а n — количество цифр в a.

Тогда получим b*(2*10^n-1)=8*a,
но так как 2*10^n-1 на 2 не делится, то b должно делится на 8, т.е. равнятся 8, а значит a должно равняться 2*10^n-1. В последнем числе, очевидно, n+1 цифр, а в a — n, следовательно, равенство никогда не выполняется.
Где-то вы облажались, поскольку решения существуют и выше даже есть пример от damnet- 210526315789473684.
Во время решения специально перепроверил условие, хотел уточнить, какое из двух чисел меньшее, и все-же сделал ошибку:)
Вот так и непонятно, одни говорят «тривиальная задача», другие что ее вообще невозможно решить. Так есть «официальная версия решения» :)?
int исчерпан :(
перевожу на long
мдя, я лет 100500 так считать буду. сейчас переведу на BigInteger (теоретически бесконечное число) и пусть кто-нибудь, кто располагает большими выч. мощностями стучит в личку :-D
готово, ну что, у кого есть сервер с INTEL QUADx8 128 GB RAM с jvm? )
слабовата у вас скорость перебора. Я довёл до 420 миллионов проверок в секунду на одном ядре, примерно 8,6 такта процессора на проверку одного числа. Инт ущитывается весь за несколько секунд, а вот 8ми байтовой целое будет считаться очень долго, чтобы найти число которое приведено в комментариях мне потребуется 8 лет. Я конечно еще на 25% разгонял брутер, но она некрасивый по коду получается. Ну многопоточность, даже на 16 ядрах будем пол года считать до первого числа. А уж о выявлении всех таких чисел даже в диапазоне 8ми байт я просто молчу
>BigInteger
>int
>ай, бида-бида, нативный int быстрее BigInteger
420 миллионов штук в секунду это я 8ми битовые инты перебираю, всё равно их считать более 10 лет.
В двоичной системе исчисления умножение на 2 делается как раз сдвигом влево.
Что-то у меня получилось что нет целочисленного решения :)

abcde*2 = bcdea
2(10000a + 1000b + 100c + 10d + e )=10000b+ 1000c + 100d + 10e + a
20000a + 2000b + 200c + 20d + 2e = 10000b+ 1000c + 100d + 10e + a
a=20000a + 2000b + 200c + 20d + 2e-10000b-1000c — 100d — 10e
-19999a = 2000b + 200c + 20d + 2e-10000b-1000c — 100d — 10e

a=(2000b + 200c + 20d + 2e-10000b-1000c — 100d — 10e)/-19999
a=(8000b + 800c +80d + 8e)/19999

19999a=8*bcde

19999*a/8=bcde

a может изменяться в пределах от 0 до 4 включительно (иначе bcdea было бы больше на порядок)

Чисел от 0 до 4, которые, будучи помноженными на 2499,875 (это 19999/8) давали бы целочисленный результат я не знаю :)

bcde=19999*a/8
Простите, цифр*
Вы, как и многие здесь, не обратили внимание на «разрядность не ограничена», а почему-то решили что число пятизначное)
Суть задачи: найти число, которое, если взять последнюю цифру...

В моем понимании цифра это 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Все что больше — Числа.

http://ru.wikipedia.org/wiki/Цифр

А про разрядность да, не углядел.
Причём тут цифра? Выкладки то Ваши для пятизначного числа.
Разрядность не имеет значения.

Число разрядности n представимо полиномом вида
a*10n + b*10n-1 + c*10n-2 +… + y*101 + z
Перенесем первую цифру и запишем полученное число в виде полинома
b*10n + c*10n-1 + d*10n-2 +… + z*101 + a

Составим уравнение
2a*10n + 2b*10n-1 + 2c*10n-2 +… + 2y*101 + 2z = b*10n + c*10n-1 + d*10n-2 +… + z*101 + a

a(2*10n – 1) = b*10n-1 * 8 + c*10n-2 * 8 + d*10n-3 * 8 +… + z * 8

Выносим восьмерки

a(2*10n – 1) = 8( b*10n-1 + c*10n-2 + d*10n-3 +… + z)

a = 8 *(b*10n-1 + c*10n-2 + d*10n-3 +… + z) / (2*10n – 1)

И полученное число должно быть натуральным, от 0 до 9.
Число в знаменателе, очевидно, будет представлять собой единицу и n девяток.
Забудем на время про восьмерку, посмотрим на оставшуюся часть дроби. Степень знаменателя, как видно, больше степени числителя. Т.е. дробь правильная, ее значение лежит на интервале [0,.5). Получить целое число можно с помощью восьмерки (Кстати, оно должно быть меньше 4 ввиду правой границы интервала).
Что может дать нам девятку в конце числа? Умножение 7 на 7, 1 на 9, 9 на 1 или 3 на 3. То есть, частное (если нам удастся поделить знаменатель на числитель) будет оканчиваться на 1, 3, 7 или 9. Внимание,
вопрос: какое число, оканчивающееся на любую из этих цифр, будет делиться на 8 без остатка?
Никакое, так как 8 четное, а 1,3,7,9 нечетные, а значит и числа будут тоже нечетными)
Нечетные на четные не делятся.
Не понятно только, зачем нам нужна девятка в конце числа?

Можно пойти по-другому:

a*10n + b = 2*(b*10+a)
a = {0,2,4,6,8}
b — целое число
отсюда
b = (10n-2)*a/19

остается найти число 10n-2, которое делится на 19. И такие числа существуют(по крайней мере одно). Другое дело, что на бумаге я его найти не смогу =)
Да, насчет a={0,2,4,6,8}, я похож соврал, но картину это не портит.
НЛО прилетело и опубликовало эту надпись здесь
Суть задачи: найти число, которое, если взять последнюю цифру и переместить в начало будет в два раза меньше получившегося числа. То есть, abcde * 2 = bcdea. Разрядность не ограничена.

abcde * 2 = bcdea — первая цифра в конец.
abcde * 2 = eabcd — последняя в начало.
Написал програмку которая брутит. Запустил и жду…
Вот если кто то хочет довести до конца — вот код.

  1. public class Main {
  2.  
  3.     public static int digits(long number) {
  4.         int count = 0;
  5.         while (number != 0) {
  6.             number /= 10;
  7.             count++;
  8.         }
  9.         return count;
  10.     }
  11.  
  12.     public static boolean check(long number, boolean debug) {
  13.         if(debug)
  14.             System.out.println("Completed " + number + " numbers");
  15.  
  16.         long last = number % 10;
  17.         if(last % 10 == 0)
  18.             return false;
  19.         long res = number/10+last*(long)Math.pow(10, digits(number)-1);
  20.  
  21.         return number*2 == res;
  22.     }
  23.  
  24.     public static void main(String[] args) {
  25.         for(long i=0;i<Long.MAX_VALUE;i++) {
  26.             boolean c = check(i, i%10000000==0);
  27.             if(c) {
  28.                 System.out.println(i);
  29.                 break;
  30.             }
  31.  
  32.         }
  33.     }
  34. }
BigInteger — МОЩ.
dpaste.org/3fqv/
правда у меня требуется еще класс-раннер.
Решение на пхп:

<?php
$a = 2;
$source = array($a*2);
$modified = array($a);
$add = 0;
do
{
$newDigit = $source[0] * 2 + $add;
$add = 0;
if($newDigit > 9)
{
$newDigit = $newDigit % 10;
$add = 1;
}
array_unshift($source, $newDigit);
}
while(!check($source, $a));

echo implode('', $source);

function check($source, $a)
{
$modified = array_merge(array_slice($source, 1, count($source)), array($source[0]));

$add = 0;
for($i=count($modified)-1;$i>=0;$i--)
{
$d = $modified[$i] * 2 + $add;
$add = 0;
if($d > 9)
{
$d = $d % 10;
$add = 1;
}
if($d != $source[$i])
return false;
}
if($add == 0)
return true;
else
return false;
}
?>
С++-прогеры, напишите свое решение! жаба и пых очень медленные )
моё решение выше выполняется за доли секунды — это не брутфорс
Суть задачи: найти число, которое, если взять последнюю цифру и переместить в начало будет в два раза меньше получившегося числа. То есть, abcde * 2 = bcdea


Сказали одно, пример привели не тот=)
Если число в 2 раза меньше получившегося, то bcdea * 2 = abcde. Или, чтоб понятнее, abcde * 2 = eabcd

Кстати, если моя логика меня не подводит, задача вида abc… * 2 = bc...a не решается.
еще задачка:
найдите число, сумма цифр которого равна этому числу )
НЛО прилетело и опубликовало эту надпись здесь
105263157894736842
157894736842105263
210526315789473684
263157894736842105
315789473684210526
368421052631578947
421052631578947368
473684210526315789

Ударим мозгами по брутфорсу же!
В следующих числах по 36 цифр. Кто не будет думать, будет брутфорсить очень долго

Подсказка:
105263157894736842
157894736842105263
210526315789473684
263157894736842105
315789473684210526
368421052631578947
421052631578947368
473684210526315789
да черт возьми же, выложите решение !
shaman4d.habrahabr.ru/blog/93370/#comment_2833220

101, 102,…, 1018 все имеют различные остатки от деления на 19, и дальше эта последовательность повторяется с периодом 18. В частности, остаток 2 имеют степени 1017, 1035 и т.д. Остается подобрать такое (четное) a, чтобы 10n < b < 10n-1 — 2,4,6,8:
105263157894736842
210526315789473684
315789473684210526
421052631578947368

Числа большей разрядности можно получить простым повторением этих:
105263157894736842105263157894736842105263157894736842 * 2 = 210526315789473684210526315789473684210526315789473684
a не обязательно чётное. Так правильнее: a = [2; 9]
ну тогда уже a = [0,4];
Когда а >= 5 при умножении на 2 количество разрядов у числа увеличится. А при нуле вполне себе может существовать решение.
Вы путаете задачи. Внимательней почитайте комментарии, автор допустил ошибку при написании топика.
То, что есть другая задача, я знаю. Очень много других задач. Но ведь обсуждение идет именно этой задачи, разве нет? И применительно к ней мое замечание тоже действительно.
Хотя если смотреть на комментарий galaxy, то я не прав, ведь он ведет речь о числах.
Просто проскочил суть в контексте общей задачи, где оперировали цифрами.
задачку эту решал еще в пятом или шестом классе на олимпиаде по математике, решил таки :) решение находится алгритмически просто :)
У меня вышло, что решения не может существовать.
если представить число так
(a*m + b) * 2= b*10 + a, где m число вида 10^x, где x натуральное число.
1. если a >= 5 при умножении на 2 количество разрядов поменяется.
2. a != 0, т.к. 2*b != 10*b
Значит a = [1, 2, 3, 4]

если перенести члены, то получается
a*(2m-1)/8 = b

2m-1 всегда будет вида 19, 199, 1999, а a меньше 8, тоесть целочисленное b невозможно.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории