貌似容斥原理在计数中用的还是很多的...
容斥远离的公式还是容易记住的,见下面的wiki链接:
http://zh.wikipedia.org/wiki/%E6%8E%92%E5%AE%B9%E5%8E%9F%E7%90%86
问题是,如何将“跳蚤”一题里的叙述对应到题目中呢?
如何想到将m分解质因数?
首先,容易想到最大公因数的等式;说明:符合条件的组合里,所有数字的最大公因数为1;然后,想一想什么样的组数最大公因数不为1呢?设k是m的因子,那么以k为最大公因子的组数有(m/k)^n; 但是,这里面有重复的
如何想到用容斥原理计数呢?
遇到对一堆集合计数而集合之间有交有并,想要求出集合中的总数时,可以用容斥原理
从该题的代码中想到的枚举方法
每次枚举限制选取的数字的个数,然后在没有选满的每一层枚举,用一个数组记录,因为是dfs,所以不用担心重复的问题