Senior IT Engineer – ARCE contact center
  • Сага о тестовых заданиях

    Я виходив з того, що внаслідок перенесення в старший розряд та позиція, яка заповнилася б без переносу буде містити значення менше за 9.
    Повторюся, що побудова паліндромів з перевіркою «згори» на розкладення в два простих п,ятизначних множника значно випереджає за часом всі реалізовані мною варіанти з обрізанням варіантів зменшення числа кандидатів.

  • Сага о тестовых заданиях

    Мої міркування виходять з того, що в данному контексті результатом розглядаються числа паліндроми. І всі міркування щодо початкової і кінцевої цифр стосуються лише їх. До речі, пан Strukov правий, що у мене немає коректного доведення гіпотези про те, що існує паліндром виду 9.....9 (з непарною кількістю цифр), що є добутком двох простих r-розрядних чисел (де r = n div 2 + 1). Але наведені приклади (знизу до факту рішення проблеми) дають мені право вважати, що таке припущення коректне (і конкретно для мене цього досить).

    PS: після вчорашньої апробації ідеї Ihor Iaromenko щодо перевірки зверху тільки чисел паліндромів і знаходження першого з них, що відповідає умові, обговорення рішення, котре потребує більше ресурсів вже не виглядає таким цікавим.

  • Сага о тестовых заданиях

    Идея абсолютно работоспособна :)
    Вот что получилось в результате:

    Test started
    Test finished
    Count of iteration: 12892
    Found: 1
    Time: 00:00:00.000

    ЗЫ: Как-то даже очень быстро для такой красивой задачи

  • Сага о тестовых заданиях

    Ну... можно поработать в этом направлении :) (за строгими доказательствами это к более высоколобым нежели я товарищам)
    Четное число цифр в результате не рассматриваем, так как известно, что такое делится на 11
    989 = 23 * 43
    99899 = 283 * 353
    9975799 = 3061 * 3259
    999949999 = то, что нам и требовалось найти :)

  • Сага о тестовых заданиях

    з кількістю цифр особливих проблем не бачу — результат добутку буде 9- чи 10-значним. Про 10-значні однозначно з,ясували, що паліндроми діляться на 11, тобто не наш варіант. Відповідно, залишаються 9-значні. Виберемо найбільше з них — 999999999. Наступними меншими з них будут такі, які змінюються в бік зменшення з середини — 9999899999, 999979999... 999XYX999... 99ZXYXZ99... 9VZXYXZV9...
    Стосовно цифр по краях числа. Наші прості закінчуються на (1, 3, 7, 9). Подивимося на останні цифри, котрі вони можуть давати:
    1 * 1 = 1
    1 * 3 = 3
    1 * 7 = 7
    1 * 9 = 9
    3 * 3 = 9
    ---
    3 * 7 = 21
    3 * 9 = 27
    7 * 7 = 49
    7 * 9 = 63
    9 * 9 = 81
    Комбінації з перенесенням значення в 10-й знак нам не підходять.
    Залишаються
    1 * 1 = 1
    1 * 3 = 3
    1 * 7 = 7
    1 * 9 = 9
    3 * 3 = 9
    Тобто, серед чисел виду 9VZXYXZV9 має бути таке, котре утворене добутком двох простих п,ятизначних чисел. Тобто слід брати такі, які дають 9 на початку і 9 на кінці, а це лише ті за наших простих, котрі починаються на 1, 3, 9.
    Профіт :)

    Підтримав: anonymous
  • Сага о тестовых заданиях

    С учетом замечания Ihor Iaromenko количество внутренних циклов снизилось до 18991, а время — до 0,17 сек.

  • Сага о тестовых заданиях

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

    ЗЫ: с учетом комментариев по поводу десятизначных палиндромов by Ihor Iaromenko результат можно еще улучшить. :)

  • Сага о тестовых заданиях

    Не JS. Но опыт реализации одного и того же решения на компилируемых и интерпретируемых языках (в частности, Delphi и VBA) подсказывает, что на сегодняшний день разница в быстродействии не превышает два раза — как правило, это коэффициент до ~1,2. Встречал даже отсутствие разницы в быстродействии!
    С другой стороны, чтобы не привязываться ко времени, можно попытаться оценить количество исполнений самого глубокого цикла в решении. В моем варианте для этой задачи их 342020.

  • Сага о тестовых заданиях

    ~0.25 сек. :)

  • Сага о тестовых заданиях

    Задание действительно интересное :).
    Правда ваше решение, похоже, содержит ошибку — число 99429 не является простым.

    Підтримали: Ihor Iaromenko, Mike Gorchak