随笔分类 -  数论——容斥原理

摘要:题意1:问你一个串有几个不连续子序列(相同字母不同位置视为两个) 题意2:问你一个串有几种不连续子序列(相同字母不同位置视为一个,空串视为一个子序列) 思路1:由容斥可知当两个边界字母相同时 dp[i][j] = dp[i + 1][j] + dp[i][j - 1] - dp[i + 1][j - 阅读全文
posted @ 2019-03-10 16:15 KirinSB 阅读(214) 评论(0) 推荐(0)
摘要:题意:给n,m,求出 思路:题意为求出1~m所有数和n的gcd之和。显然gcd为n的因数。我们都知道gcd(a,b)= c,那么gcd(a/c,b/c)= 1。也就是说我们枚举n所有的因数k,然后去找1~m/k中和n/k互质的个数就是gcd为k的个数。这个直接容斥就行。 代码: 阅读全文
posted @ 2018-11-01 12:13 KirinSB 阅读(194) 评论(0) 推荐(0)
摘要:Description Yehan is a angry grumpy rabbit, who likes jumping into the hole. This day,Yehan jumps again in the pit at home. Each time, he should jump 阅读全文
posted @ 2018-09-04 22:03 KirinSB 阅读(249) 评论(0) 推荐(0)
摘要:题意:有一块(1,1)到(m,n)的地,从(0,0)看能看到几块(如果两块地到看的地方三点一线,后面的地都看不到)。 思路:一开始是想不到容斥...后来发现被遮住的地都有一个特点,若(a,b)有gcd(a,b)!= 1,那么就会被遮住。因为斜率k一样,后面的点会被遮住,如果有gcd,那么除一下就会变 阅读全文
posted @ 2018-08-31 23:35 KirinSB 阅读(231) 评论(0) 推荐(0)
摘要:思路:二进制解决容斥问题,就和昨天做的差不多。但是这里题目给的因子不是质因子,所以我们求多个因子相乘时要算最小公倍数。题目所给的因数为非负数,故可能有0,如果因子为0就要删除。 代码: 阅读全文
posted @ 2018-08-31 13:03 KirinSB 阅读(161) 评论(0) 推荐(0)
摘要:题意:给出[a,b]区间内与n互质的个数 思路:如果n比较小,我们可以用欧拉函数解决,但是n有1e9。要求区间内互质,我们可以先求前缀内互质个数,即[1,b]内与n互质,求互质,可以转化为求不互质,也就是有除1的公因数。那么我们把n质因数分解,就能算出含某些公因数的不互质的个数。因为会重复,所以容斥 阅读全文
posted @ 2018-08-30 13:52 KirinSB 阅读(241) 评论(0) 推荐(0)
摘要:题意:定义如果一个数能表示为M^k,那么这个数是好数,问你1~n有几个好数。 思路:如果k是合数,显然会有重复,比如a^(b*c) == (a^b)^c,那么我们打个素数表,指数只枚举素数,2^60 > 1e18,所以打60以内素数就够了。但是显然指数为素数依然会有重复的,比如(a^b)^c == 阅读全文
posted @ 2018-08-29 16:54 KirinSB 阅读(407) 评论(0) 推荐(0)