使用素数是否有利于确定一组条件的“开”/“真”值?

时间:2014-09-17 03:59:04

标签: primes

我想检查列表是否包含元素。现在不是每次遍历列表,而是想找到一个快速的解决方案。假设有一个规则列表r1,r2,r3,r4,r5。每个用户都有一个id 3,5,7,11,13(所有素数)。我正在获得不同的用户ID以及他们的特定规则/特征列表。

根据特定条件,我对分组用户有不同的规则分组。对于前者group1 = r1& r2,group2 = r3,group3 = r3,r4& r5;这里的组用作具有特定规则/特征组合的用户桶

现在如果用户u1满足规则/字符r1,r2和r3,他应该属于group1& rn;组2

如果用户u2满足规则/特征r3,r4,r5,他应该属于group2&组3

根据我的解决方案,我将找出规则ID的乘积,它们是用户的素数。因此,对于u1,它将是r1 * r2 * r3 = 3 * 5 * 7 = 105。我只会做一次这样的计算。然后找出每组规则ID的乘积。

group1 -> r1 * r2 = 3*5 = 15
group2 -> r3 = 7
group3 -> r3*r4*r5 = 7*11*13 = 1001

我也可以在创建组时进行上述计算(用于查找组产品),以避免每次都在组中遍历规则ID。

现在主要部分我会检查

适用于所有群组{ 如果uid规则产品%group product == 0 然后uid就在那个组中

}

现在因为我只使用素数,如果规则ID存在于组中但不存在于用户的规则中,则其 uid规则产品%group product 永远不会为零

我希望我的问题不要太模糊。等待那些做过类似事情的人倾听,或者认为这样可行。

1 个答案:

答案 0 :(得分:2)

走动找到了你的问题:。 你可以区分几个规则:使用素数可以工作,但成本很高。最简单的方法是增加2:1 + 2 + 4 + 8等的功率(是二进制!)要查找规则或集合是否在内部进行AND:如果result = question,ok。 这种方式具有32位:32个规则。具有素数2 X 3 X 5 X 7×11 X 13 X 17(仅7个规则)已经占用超过32位。很简单:新规则在第一种情况下乘以2,否则乘以下一(增长)素数。很快就会超出范围。

HTH