Filpping биты в двоичном числе

Может ли кто-нибудь дать четкую логику для следующей проблемы. Я застрял в замешательстве.

На вход подается n-битное число, и к нему последовательно применяются OP(j) и OP(k). Цель состоит в том, чтобы указать, сколько битов останется неизменным после применения этих двух операций.

OP(i) подразумевает перестановку каждого i-го бита. я > 0


person Akash Sinha    schedule 04.11.2015    source источник
comment
Звучит очень похоже на то, что по определению n - 2 биты остаются неизменными, за исключением случая, когда j == k, и в этом случае биты не меняются. Я что-то неправильно понимаю?   -  person Dolda2000    schedule 04.11.2015
comment
меня на самом деле смущает определение OP (i) .. Извините, я отредактировал то же самое. Это говорит о переворачивании каждого i-го бита.   -  person Akash Sinha    schedule 04.11.2015
comment
Что ж, по крайней мере, это сделало вопрос более осмысленным. :) А что вас смущает? А также, почему вопрос помечен тегом c?   -  person Dolda2000    schedule 04.11.2015
comment
Если один бит переворачивается дважды, считается ли он измененным битом по сравнению с исходным?   -  person Some programmer dude    schedule 04.11.2015
comment
Что это значит, переворачивая каждый i-й бит. Насколько я понимаю, если я укажу позицию, то будет перевернут только этот бит ... но каждый? .. Помогите, пожалуйста   -  person Akash Sinha    schedule 04.11.2015
comment
Насколько я понимаю, если вы делаете OP (2), то каждый второй бит переворачивается, OP (3) переворачивает каждый третий бит. Если вы не уверены, и это школьное задание, то вам нужно спросить своего учителя или помощника учителя.   -  person Some programmer dude    schedule 04.11.2015
comment
+Иоахим Пилеборг - тогда что означает OP(1)   -  person Akash Sinha    schedule 04.11.2015
comment
Каждый кусочек? Действительно, спросите своего учителя или того, кто дал вам задание. Все, что я делаю, это догадываюсь, ваш учитель - единственный, кто знает наверняка и может вам помочь.   -  person Some programmer dude    schedule 04.11.2015
comment
Извините за беспокойство, но я получил этот вопрос в каком-то конкурсе кодирования. все, что я сделал, было n-2 вещь. Но мне интересно, есть ли какая-то другая логика.   -  person Akash Sinha    schedule 04.11.2015


Ответы (2)


Основываясь на вашем описании, операция OP(i) изменит каждый i-й бит, поэтому она изменит в общей сложности биты пола (n/i). Цепочка операций усложняет задачу. Если один и тот же параметр передается дважды, то одни и те же значения будут перевернуты, общее количество перевернутых битов равно 0, поскольку мы возвращаемся к исходному значению.

Если во второй операции используется другое значение (j), вам нужно прибавить пол(n / j), а затем вычесть 2*M, где M — число общих кратных i и j в диапазоне n. Это связано с тем, что вы будете дважды переворачивать любые общие кратные и возвращать их к исходному значению, но, накопив их дважды (один раз в OP (i) и один раз в OP (j)), вам нужно вычесть 2 из общей суммы для учета этого.

person Matt O    schedule 04.11.2015

Для k != j n-2 бита остаются прежними. Когда k == j, n-1 бит остается неизменным.

person Mahesh Mankar    schedule 04.11.2015