• Делимость двоичного числа на N?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Максимальное число для A+B бит = С = 2^(A+B) - 2^B, т.е. для 9 бит это 2^9-2^2 = 512-4 = 508

    Нужно найти все числа от N до С включительно, которые делятся на N без остатка (по сути являются произведением N на индекс цикла от 1 до (C div N) включительно), и проверить, являются ли они суммами не повторяющихся степеней двойки, и если являются, то равняется ли количество чисел в сумме значению A. Т.е. проверяем, все ли A бит задействованы.

    Для данного случая при N = 25, 508 div 25 = 20 (итераций). Нужно проверить является ли произведение индекса цикла на N суммой из A (7) чисел (не повторяющихся степеней двойки от 0 до A+B-1 (8)).

    Числа (степени двойки) можно предварительно вычислить и сложить в массив, и доставать оттуда по индексу.

    Таким образом самое сложное, что нужно написать, это функцию, которая будет проверять, является ли её аргумент суммой A не повторяющихся степеней двойки от 0 до A+B-1.

    Проверять все не нужно, можно прерывать выполнение на первом положительном результате.

    Быстро проверять на степень двойки можно через битовую операцию сравнения И

    Например K = 13 (8+4+1), тогда K & 1 = 1, K & 2 = 0, K & 4 = 4, K & 8 = 8. Т.е. очевидно, что если K & 2^i > 0, то число содержит степень двойки. Ну и останется считать для каждого числа, сколько степеней двойки оно в себе содержит.

    Опять же, сверять надо не со всеми степенями двойки, а с ближайшей меньшей от K, т.е. для K=28, максимальная степень двойки для сравнения будет равна 16. Для K=50 - 32, для К=100 - 64 и т.д.

    Нужно будет как-то вычислять эту степень, лучше всего лениво. Просто вычисляя очередное К, проверить, больше ли оно следующей степени двойки.

    https://codedump.io/share/hMw9j5suUF41/1/doesbinar... вот беглое решение на JS

    PS: решение нуждается в оптимизации, но это уже самостоятельно :)
    Ответ написан
    Комментировать
  • Делимость двоичного числа на N?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Динамическое программирование:
    F(a,b,r) = может ли число составленное из a едениц и b нулей давать остаток r при делении на N.
    База: F(0,0,0) = true, F(0,0,r) = false.

    Пересчет: Итеративный пересчет такой - F(a,b,r) => то F(a+1,b,(2*r+1) % N) и F(a,b+1,(2*r+1) % N) Тут мы знаем, что есть число, дающее остаток r из a едениц и b нулей. Если мы к нему припишем в конец 1, то остаток будет (2*r+1)%N, а единиц будет на одну больше. Также почти можно приписать 0.

    Для рекурсивного надо сначала избавится от всех степеней 2 в N (просто подсчитайте степень, вычтите это из B, поделите N на все двойки - В числе в конце обязательно должно стоять столько нулей).

    Теперь можно найти x такое, что 2x = 1 (mod N) - обратное к 2 по модулю N. Смотрите расширенный алгоритм Эвклида для этого.

    Дальше можно вычислять так (N - нечетное):
    F(a,b,r) = F(a-1,b, (r-1)*x % N) || F(a, b-1, r*x % N).

    Объяснение тут тоже простое - число или оканчивается на 0 или на 1. Попробуем оба варианта и сотрем последнюю цифру. Оставшееся число должно давать остаток (r-1)*x % N или r*x % N соответственно.

    Ответ: Если F(A,B,0) - true, то число делящееся на N есть. Для нахождения числа надо дополнительно запоминать, какие цифры приписывались к чисам при рассчетах выше.
    Ответ написан
    1 комментарий
  • Имеют ли право без ведома студента выбирать тему дипломной работы?

    Griboks
    @Griboks
    Нет, не могут. Студент должен лично написать заявление с указанием темы.
    Ответ написан
    1 комментарий
  • Становиться ли сайт коммерческим,если на нём показывается реклама?

    Moon_Lobster
    @Moon_Lobster
    Инвестор
    Если вы получаете деньги с рекламы, то скорее всего это будет трактоваться как коммерческое использование.
    Ответ написан
    Комментировать
  • Возможен ли план самообучения WEB разработке?

    @programrails
    А я думаю, что настоящее развитие может быть только по плану. Однако, ваша самая главная задача сейчас - это хорошо учиться в школе. Выучите веб, но ценой завала школы - глупость неимоверная, преступная. Не надо так спешить, детство даётся один раз в жизни. Не вебом единым жив человек. Не следует думать в отношении некоторых школьных предметов, что "это мне не понадобится". Понадобится всё. Начать с веб можно и с 18 лет - вполне достаточно. Если уж так неймётся - то забросьте пока до 18 лет к чёрту всю эту веб-разработку и основной упор сделайте на изучение английского языка. Станьте асом в английском языке и тогда ваши (российские) конкуренты (со временем) останутся далеко позади - потому что подавляющее большинство российских разработчиков позорно плохо (до смешного плохо) знают английский. Хороший английский - это секретный ключ к успеху в программировании. Не имея навыка смотреть американский фильм с оригинальной дорожкой и понимать (на слух) хотя бы половину - хорошим программистом не стать. Во-первых, бОльшая часть веб-документации - только на английском. Во-вторых - никогда не читайте англоязычную документацию в русском переводе (книги, статьи) - ничего не поймёте правильно - только в оригинале. Потому что перевести такое невозможно - можно только заново написать на другом языке. В-третьих - будете в Турции/Египте летом - сможете больше пообщаться при необходимости.

    Изучение английского - это очень временеёмкая задача. Именно в юном возрасте и следует этим заниматься. Потом, после 18, жизнь уже не даст такого шанса, и будете потом постоянно себе говорить - какой же я был дурак, что не изучал его ранее. Можно даже прямо сейчас найти какие-то курсы английского - для детей-подростков это по карману, для взрослых же будут драть втридрога. Не пожалейте никаких усилий ради английского.

    Когда вам исполнится 17-18 - вообще забудьте про веб и все силы бросьте на поступление в ВУЗ. И лишь после поступления можно начинать с вебом. Да, и забудьте про компьютерные игры. Прямо начиная с сегодня. Совсем. Навсегда.

    Все предыдущие советы даны без учета возраста задающего вопрос. Эти ответы рассчитаны на человека от 18 лет возрастом. Мой же ответ - именно для 14-летнего.
    Ответ написан
    26 комментариев
  • Опасность внедрения webviev?

    livetyping
    @livetyping
    Кое-что знаю о разработке и маркетинге в digital
    Чтобы на сайте был https.
    Чтобы фичи с вебвью были доступны после авторизации.
    Система уникальных токенов.
    Ответ написан
    Комментировать
  • Как организовать работу в команде с помощью git?

    Организацию работы любой работы стоит начать с изучения документации.
    Git не исключение. Git новичку кажется довольно сложной штукой (но на самом деле он очень прост). Поэтому начинать нужно с того, что каждого нужно заставить прочитать Pro Git (или русский перевод "Git для профессионалов"). Читать можно не всё, примерно половину книги занимает информация по администрированию (что рядовому разработчику не нужно). Поэтому времени на изучение уйдёт максимум 5 вечеров.

    Тогда 90% вопросов уйдут сами собой.
    Не будет тупых вопросов "как удалить коммит", "как правильно мержить", "как пушить" и прочее, что часто проскакивает на тостере.

    Из личного опыта.

    Ну а по поводу организации ветвления - каноничный GitFlow, либо более удачный (на мой взгляд) GitlabFlow. Или что-то своё, git на это не накладывает никаких ограничений.

    Поверьте, работа в команде, которая не умеет пользоваться git, превращается в ад и Израиль.
    Ответ написан
    Комментировать