- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
您好,我想用 Java 编写包含和排除主体的代码。我想为这个问题编写代码
给定 N 个质数和一个数 M,找出 1 到 M 中有多少个数可以被这 N 个给定质数中的任何一个整除。
The number of integers between 1 and 500 (both inclusive) that are divisible by 3 or 5 or 7 is
P(3 U 5 U 7) = P(3) + P(5) + P(7) - P(3X5) - P(5X7)- P(3X7)+ P(3X5X7)
P(3) = 500/3 = 166.66 Take 166 ,
P(5) = 500/5 = 100 ,
P(7) = 500/7 = 71.42 Take 71,
P(3X5) = p(15) = 500/15 = 33.33 Take 33 ,
P(7X5) = p(35) = 500/35 = 14.28 Take 14,
P(3X7) = p(21) = 500/21 = 23.8 Take 23,
P(3X5x7) = p(105 ) = 500/105 = 4.76 Take 4
Answer = 166+100+71-33-14-23+4 = 271
我正在尝试使用此 C++ 实现构建 Java 代码 https://www.geeksforgeeks.org/inclusion-exclusion-principle-and-programming-applications/
int count(int a[], int m, int n)
{
int odd = 0, even = 0;
int counter, i, j, p = 1;
int pow_set_size = (1 << n);
//this for loop will run 2^n time
for (counter = 1; counter < pow_set_size; counter++) {
//I am not understanding below for loop code
p = 1;
for (j = 0; j < n; j++) {
/* Check if jth bit in the counter is set
If set then pront jth element from set */
if (counter & (1 << j)) {
p *= a[j];
}
}
// if set bits is odd, then add to
// the number of multiples
if (__builtin_popcount(counter) & 1)
odd += (100 / p);
else
even += 100 / p;
}
return odd - even;
}
我只是不明白这个 for 循环的真正作用
for (j = 0; j < n; j++) {
/* Check if jth bit in the counter is set
If set then pront jth element from set */
if (counter & (1 << j)) {
p *= a[j];
}
}
还有这部分
// if set bits is odd, then add to
// the number of multiples
if (__builtin_popcount(counter) & 1)
odd += (100 / p);
else
even += 100 / p;
给出了我不理解的解释
The numbers that are formed by multiplication of an odd number of prime numbers will be added and the numbers formed by multiplication of even numbers will thus be subtracted to get the total number of multiples in the range 1 to M.
请有人能帮我用这个逻辑在 java 中实现它吗?
提前致谢:)
最佳答案
外层循环用于从输入数组中生成所有可能的素因子子集。 counter
中的每一位代表数组中的一个位置。
内部循环检查counter
中的每一位,如果该位被设置,它会将数组中相应的素数乘以p
,即所有素数因子的乘积正在检查的子集。例如,给定素数数组 {3, 5, 7}
:
counter bits factors product
1 001 a[0] 3
2 010 a[1] 5
3 011 a[0] * a[1] 15
4 100 a[2] 7
5 101 a[0] * a[2] 21
6 110 a[1] * a[2] 35
7 111 a[0] * a[1] * a[2] 105
C++ 内置函数 __builtin_popcount(counter)
计算 counter
中设置位的数量。 Java 等效项是 Integer.bitCount()
。它用于测试 p
中包含的因子的数量是否为奇数(如果是,则结果的低位将被设置......这可以通过其他方式检查,例如 if (Integer.bitCount(counter) % 2 == 1)
).
最后计算p
小于m
(你的例子是500)的倍数,如果p
的因子个数p
是奇数,如果是偶数则排除集。
请注意,C++ 示例中存在一个错误,它会忽略 m
参数并使用硬编码值 100
。
在 Java 中:
public class IncExc {
public static void main(String[] args) {
int a[] = {3, 5, 7};
int m = 500;
System.out.println(count(a, m));
}
static int count(int a[], int m) {
int odd = 0;
int even = 0;
int powSetSize = 1 << a.length;
// For all sub-sets of elements in the array of primes
for (int counter = 1; counter < powSetSize; counter++) {
int p = 1;
for (int j = 0; j < a.length; j++) {
// If the jth bit of this combination is set then multiply in the jth element
if ((counter & (1 << j)) != 0) {
p *= a[j];
}
}
// If the number of factors in p is odd, accumulate the count of multiples in our "odd" register
// Otherwise use the "even" register
if ((Integer.bitCount(counter) & 1) == 1)
odd += m / p;
else
even += m / p;
}
return odd - even;
}
}
关于java - java中的包含和排除原则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49639059/
我有一个名为“members”的数据库表。分配给成员的是一个职位。 职位 来自部门。我有 Departments,然后是那些中的 Sub-Departments 和 Sub-Departments 中
我正在尝试为 Solr 搜索应用过滤器标记 Tagging_and_excluding_Filters . 挑战在于同时应用多个标记(对于单个页面上的多个选择选项)。例如 q=mainquery&fq
我知道这个问题已经被问过很多次了,我已经尝试了所有建议,并阅读了有关不同选择器等的所有内容,但没有任何对我有用 给出以下 HTML 片段: link
是否有直接的 LINQ 语法来查找集合 B 中不存在的集合 A 的成员?在 SQL 我会写这个 SELECT A.* FROM A LEFT JOIN B ON A.ID = B.ID WHERE B
我试图排除并在现有xpath中包括以下xpath,但不太确定如何做到这一点 //exclude -> //*[@id="ires"]/ol/li[6]/div/a[1]/img //include
我有 30 个站点,我需要在其中 24 个站点上回显某些内容。我怎样才能排除其他人?该代码不起作用,因为我认为它的逻辑是假的:) $currentsite = get_bloginfo('wpurl'
我需要对目标文件夹进行检查,并检查文件是否来自今天,并且超过5kb 下面的命令根据使用今天的日期存在的文件来提供bool值,但是我还要添加-gt5kb之类的排除项 我尝试使用-Exlcude,但不确定
我编入索引的Elasticsearch文档包含许多字段。我一直在使用match_all查询来获取结果。我想从match_all中排除一些字段,这可能吗? 最佳答案 在Elasticsearch中,您可
我正在为我的 DAO 编写一些测试,因为很多测试使用保存到我的数据库中的测试对象,所以我使用注释 @Before 和 @Before 创建了 setup() 和teardown() 方法@After
我编写了一个程序来解决以下问题: Implement a diffusion limited aggregation simulation on a toroid plane where seeds
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
很多时候我必须运行这个查询: select * from users where name is not null and name != '' 有没有更好的方法来做到这一点。我需要更多的性能,任何建
如果检测到某个操作系统,是否有一种简单的方法可以排除某些代码? 我设计了一个运行良好的网站(它是一个 sidescroller),当使用滚轮(向上/向下)时,它会左右滚动。但是,如果您使用的是 Mac
我应该如何排除“IN”子句中的值? $Graduates = "45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,6
很明显,如果一个 Mysql 表的全文索引包含一个出现在 50% 的数据行中的关键字,该关键字将被匹配查询忽略 因此,如果我有一个包含 50 个条目的全文索引“content”的表其中 27 个条目在
我有下面的循环。 我需要提取所有不包含字母 p 的名称 (lskey),但我的尝试不起作用。 for(var i = 0; i "); } } 如果有人能回答,我将不胜感激。 最佳答案 如此接
我正在尝试查找 FTP 服务器上根目录的总大小。但是,我无权访问根目录中的其中一个目录。 我想用这个函数对根目录的大小求和: size = 0 for filename in ftp.nlst("."
我有以下正则表达式来匹配 html 链接: 有点效果。除了不是真的。因为它在 编辑: 这将使它只抓取引号而不是 之后的所有内容 最佳答案 我认为您的正则表达式没有按照您的意愿行事。 这会非贪婪地捕
我在提出异常方面遇到困难,例如: import csv o = open('/home/foo/dummy.csv', 'r') # Empty file! reader = csv.reader(o
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我是一名优秀的程序员,十分优秀!