我在Java中添加了两位比特的相应位,如下所示:
1 0 1 1 0 0
1 0 1 0 1 0
====================
2 0 2 1 1 0
在此之后我将结果添加为:
2+0+2+1+1+0 = 6
现在,我必须在结果(6)中找出匹配位和非匹配位的1ns和2s的数量。我努力设置这样一个算法,它可以告诉我结果由1ns和2s组成的确切数量,但到目前为止我无法创建任何数据。 它允许每个加法结果乘以常数。可以减去各个位以实现上述目标。
更多细节: 我使用Pascal Paillier同态算法来加密这些单独的位。 Pascal Paillier仅支持加密数据,因此我只需添加。我必须将此号码发送给某些应用程序,这些应用程序必须找出1ns和2s的确切数量。
更新 我也可以像上面添加的那样将这些单位相乘。但我不能添加这些位也不是结果。比特可以与自身或任何其他比特相乘。即使我可以用我选择的数字来表示这些位。那就是我可以说1 = 2和0 = 3然后我可以:
添加(Pascal Paillier):
2 3 2 2 3 3
2 3 2 3 2 3
====================
4 6 4 5 5 9
对于乘法(RSA)
2 3 2 2 3 3
2 3 2 3 2 3
====================
4 9 4 6 6 9
唯一的目的是找出相似位(1& 1)的数量,并通过添加来生成总数中的非相似位(0& 1,1& 0) (Pascal Paillier)或乘法(RSA)。 此外,第二比特流可以用与上述不同的数字表示。
以下也可以使用:
答案 0 :(得分:0)
正如@sbelaikov在他的评论中指出的那样,数学并不允许这样做。
您的最终结果是数字数组的总和,可以是0,1或2.在您的示例中,此数字为6.我们将调用此sum
。
sum
等于1的数量加上两倍的两倍数。
sum
= ones
+(2 * twos
)
您有一个已知变量,即sum
。您有两个未知变量ones
和twos
。要求解方程组,需要另一个方程式。您的数据不足。
答案 1 :(得分:0)
我希望我能正确理解你的问题:如果你想知道x是多少1ns和2s,那就没有独特的解决方案。
想象一下数字100
。现在告诉我那里有多少人和两个人。 100个和0个两个? 0个和50个两个?或者80个和10个两个?
另一个例子:您的号码为x
和y
,而x
为除数,y
为分组的余数。
让我们将x
设为3,将y
设为2.现在找到被除数。再次,这是不可能的,因为11/3离开2,但也是:14/3; 17/3; 20/3等等..
您可以做两种可能的事情:
答案 2 :(得分:0)
最后,我找到了问题的解决方案。这是找出1ns和2s的算法:
步骤:
添加加密流 添加后的消息空间为[0,1,2] 将在结果输出上创建基数为3的多项式,如a1X ^ 1,a2X ^ 2 .. anX ^ n其中a1..an是密文加法的输出,属于[0,1,2]和X = 3 将添加所有多项式项 通过使用基数3的对数,我们将得到3的幂,其关闭为“不”。 Array bits []将用于跟踪1ns和2s
no = sum_of_polynomial_terms
log_base = 3
while (no > 0)
{
x1 = Find_log(no, log_base);
no = no - log_base^x1;
bits[x1]++;
}