一个商人有1000枚硬币和10个袋子。他必须把硬币分成十袋,这样他只需交几袋就可以造出任意数量的硬币。他必须怎样把钱分成十个袋子?
解决方案:
按照2的幂来填充硬币的想法可以从一个问题中得到,即每个袋子都可以给或不给,也就是说我们不允许打开袋子并给一些硬币。因此,我们可以将每个袋子表示为每个位置的值,该值取0或1。例如,如果我们必须给出7枚硬币,那么它只不过是0000000 111。1的最后3位数字表示,那些位置值为1,2,4的3个袋子将给出7枚硬币。请记住,每个袋子应该是给定的或不给定的,这意味着我们只有两个选择,这与基数2中的数字相似,其中每个数字只有2个值,即1或0。 我们可以按2^n的递增顺序在10个袋子中填充硬币,其中n从0到8不等,最后一个袋子中填充所有剩余的硬币,如下所示:
1 = 2^0 = 1
2 = 2^1 = 2
3 = 2^2 = 4
4 = 2^3 = 8
5 = 2^4 = 16
6 = 2^5 = 32
7 = 2^6 = 64
8 = 2^7 = 128
9 = 2^8 = 256
10=剩余硬币=489
现在,经销商只需交出袋子就可以制造任意数量的硬币。
像 所需硬币数量=一些袋子1+一些袋子2+…+一些包 例子: 519枚硬币=第2袋+第4袋+第8袋+第16袋+第489袋
除2次幂以外的因式分解算法在计算机系统上成本高昂。请分享其他信息。任何从事密码学工作的人都可以分享更多细节。
资料来源: https://www.geeksforgeeks.org/forums/topic/1000-coins-and-10-bags/
如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。