2016-07-05 2 views
-3

У меня есть набор цифр {d1, d2, d3 ...... dn} где, 1 < = di < = 9. 1 < = п < = 9Сколько номеров есть до N, которые имеют цифры 2,3,5 и делятся на 2,3,5?

Теперь я хочу, чтобы узнать, сколько номеров есть < = N, которые имеют все эти цифры в них, в любом порядке, и все эти числа также делится на эти цифры.

Путь, который я думаю, это просто перебрать с первого номера с длиной n до N и проверить, но есть ли более эффективное решение?

Пример:

D = {2,3,5} и N = 10^10

Сколько чисел есть, которые имеют все эти цифры в них и также кратно 2,3 и 5.

+0

По крайней мере, комментировать и сказать, что не так, прежде чем downvoting без причины? – user6549346

+0

Я не спускал вниз, но кнопка downvote имеет всплывающую подсказку «Этот вопрос не показывает никаких исследований ...». Это может применяться здесь - если вы включаете доказательства того, что вы пробовали, и где вы застряли, вы можете получить ответы и более полезные ответы.Если вы действительно не знаете, с чего начать, «попробуйте каждое число до 10^10», возможно, вы пытаетесь задавать вопросы, которые в настоящее время слишком сложны для вас, и вы должны сейчас сосредоточить свои усилия на более простых вопросах. Это не должно быть оскорблением, а скорее всего чем-то, что нужно учитывать, поскольку вы пытаетесь улучшить. –

+0

22350 содержит 2,3 и 5 в виде цифр. И он делится на 2,3 и 5. «Число, содержащее эти цифры, которые должны быть делятся на 2, должно заканчиваться на 2, но для того, чтобы оно делилось на 5, оно должно заканчиваться на 5» ??? – user6549346

ответ

0

Я не уверен в вашем вопросе, если вы хотите числа, которые делятся только на 2, 3 и 5, или если вы примете числа, делящиеся на какое-то другое число, если 2, 3 и 5 относятся к делителям , Предполагая первый вариант:

Сначала вычислите номера помех (числа, делящиеся на 2, 3 и 5); их насчитывается лишь несколько тысяч в возрасте до 10^10, и их легко вычислить. Во-вторых, изучите каждый из них, чтобы определить, использует ли он цифры, отличные от 2, 3 или 5.

Номера помех могут быть вычислены по индукции. Начните с 1, что является номером хромирования. Тогда, если х является числом Хэмминга, поэтому есть 2 х, 3 х и 5 х.

Если вам нужна помощь в сокращении этого кода, спросите.

EDIT: На основании приведенного ниже комментария вы хотите второй вариант («нужно проверить все кратные 2»). Рассмотрим случай 2, 3 и 5. Сначала сгенерируйте все 1-значные числа, содержащие 2, 3 или 5, что тривиально. Затем сгенерируйте все 2-значные числа, содержащие 2, 3 или 5: 22, 23, 25, 32, 33, 35, 52, 53, 55. И так далее для каждого n -digit число до вашего предела. Наконец, проверьте каждую на делимость; для вышеприведенного списка 23 и 53 будут исключены, поскольку они не делятся на 2, 3 или 5.

В любом случае трюк состоит в том, чтобы сгенерировать небольшой набор чисел, соответствующий одному из критериев, а затем проверить другие критерии.

+0

Спасибо. Но если D = {2}, то это будет проблемой, так как я должен был бы проверить все кратные 2 таким образом. – user6549346

+0

Несвязанный, но я думаю, что ваши определения номеров Хэмминга неверны. Числа Хэмминга делятся на 2, 3, ** и/или ** 5 ... но не обязательно 2, 3, ** и ** 5. https://rosettacode.org/wiki/Hamming_numbers – hymie

1

Если вы просто собираетесь итерации, то вы должны знать, что любое число, которое делится на множество чисел, также будет делиться на наименьшее общее число (я думаю, что это правильный термин) этих чисел ,

Так что в вашем случае, если число делится на 2, 3 и 5, то оно делится на 30.

Это должно ускорить ваш план итерации.

+0

Итак, таким образом я могу просто найти кратные 30 и посмотреть, содержат ли они 2,3 и 5 в качестве их цифр. Но, по-прежнему, это сложность N * log (N)/30. Это просто уменьшит время на коэффициент lcm (d1, d2, d3 .... dn). Есть ли более быстрый способ? Кстати, спасибо за этот подход. – user6549346