有人能帮我找到解决下列编程问题的方法吗?你知道吗
我目前正在使用Python2.7
目标:我试着把一系列的数字加在一起,这样它们的和,当写成二进制数时,是所有1的一系列,是某个数N的倍数
以下是我的一般程序:
(例如) 给定bin(N)[2:]='10011' 我可以保证N的倍数,M,通过适当地左移一些M位。。。你知道吗
使得m+m0+0+0+m0000=m是N的倍数(因为N=2^0+2^1+0+0+2^4)。你知道吗
所以问题归结为求m,使得m是1的级数
但我所有的编码尝试都是垃圾。。。你知道吗
我不想做一个“猜测和检查方法使用%”或任何除法。理想情况下,当答案在将所有m相加后在m的二进制字符串中找到“0”时,该方法会自动更正m,但我对其他想法持开放态度,而且越有效的方法越好。你知道吗
谢谢。你知道吗
理解这样一个问题的最好方法是,用纸和笔来计算
m
,然后将这个过程机械化。你知道吗n&1==1
),您就知道输出是奇数(m&1==1
),因为这是在m*n
的最低有效位列中获得1
的唯一方法。你知道吗m
列中应该有1
还是0
。你知道吗1
,以将m*n
的值保持为二进制1的字符串1
如果是奇数,0
如果是偶数。。。你知道吗下面是一个示例,将
n=13
(二进制1101
)的位移位值相加,确保最下面的行在每一列中放置一个1
。你知道吗读取右边的列(从最低有效位到最高有效位),答案是
100111011
,也就是315
。所以13 * 315 == 4095
,这是(正确的)二进制1的字符串我不应该真的为你做作业,但好奇心使我冲出一个快速算法来证明这是可行的。你知道吗
附录:根据您的需求,您可能希望输出为
m*n
。你知道吗附录2:考虑到问题的格式,我想当然地认为这个算法总是会停止,但我还没有给出一个正式的证明。看看会很有趣的。你知道吗
相关问题 更多 >
编程相关推荐