数论
文章平均质量分 56
sluqy671
人生如梦, 且行且失;及时行乐,岂不快哉?
展开
-
poj1737_带标号连通图计数
看到这题总有一种不好的联想, 感觉数学考试出这个题绝对不会做......(有厉害的同桌也木有用,因为这个题目是他当数学题问我的)如果f(n)就是答案的话, 那么考虑另一个g(n), 表示n个点的非连通图, 那么显然由完全图的基本性质可得f(n) + g(n) = 2 ^ (n*(n-1)/2) = h(n); 故f(n)有了新的表现形式;对于g(n)的计算, 考虑用组合数学方法: 在n个点原创 2014-12-17 19:29:36 · 573 阅读 · 0 评论 -
素数判定方法_Miller-Rabbin测试
首先了解一下伪素数的概念: 如果n是一个正整数,如果存在和n互素的正整数a满足a^(n-1)≡1(mod n),我们说n是基于a的伪素数。如果一个数是伪素数,它几乎就是素数。另一方面,如果一个数不是伪素数,它一定不是一个素数。那么在一定的条件下,如果我们选取了若干个基都发现n是伪素数, 那么n是素数的概率趋近于1。Miller-Rabbin测试现在我们只需要多次寻找不超过n-1基并原创 2014-12-03 19:41:26 · 2765 阅读 · 0 评论 -
关于康托展开的用途及写法
在处理八数码这一类需要用到全排列的问题的时候, 存储往往是一个难题, 因为明明只有n!种情况, 数字的长度却有n, 用数组是肯定不行的。 这个时候, 康托展开就派上了用场, 当然, 在条件允许的情况下map不失为一个好的处理方法。康托展开: 把满足0 那么对于一个普通的数, 我们可以在O(L)的时间内将它进行康托展开, 只要用i!不停地试除就可以了。不过首先要预处理出阶乘的数组:i原创 2014-12-05 18:16:56 · 1183 阅读 · 0 评论 -
bzoj1853_容斥原理
题目大意: 给出两个数a、b, 求在[a,b]中有多少个数是各位上仅含6和8的数的倍数。题目要求的是倍数的个数, 我们可以很快的算出来仅含6和8的数有2^10个, 剩下的暴力搜索肯定是行不通的。而在处理倍数的问题的时候, 有公式num = sum/a + sum/b - sum/lcm(a,b), 表示在[1, sum]间a和b的倍数的总数, 这里就用到了容斥原理的思想:A∪B =原创 2014-12-08 19:39:17 · 456 阅读 · 0 评论 -
对于求n个数的gcd的想法
一点小小的思路。其实也没什么, 就是把n个数依次求gcd就行了。 每求过一次两数的gcd, 就把原来的两数删除并把新的gcd加入即可。 时间复杂度O(n)。证明:若原来的n个数分别为a1,a2,...,an, 记结果ans = gcd(a1,a2,...an), 那么对于任意ai, 有ans | ai。 从集合的角度来看, 若Ai为ai的因数集合, 那么ANS = A1 ∩ A2 ∩.原创 2014-12-08 18:33:09 · 1147 阅读 · 0 评论 -
codevs3150_组合数学
最近在学习Rujia Liu的课件, 组合数学这一章里面有这道题, 但看不懂他的题解, 只好自己用组合数学来做。给出一个数n, 求有多少种排列使n与各项之和的差大于0小于4, 排列中的项只能为π或1。 这个时候自然想到要枚举较大的π的个数, 同时用组合数计算和, 再加上高精度, 这道题就可以AC了, 不过介于数据较大, 还要考虑各种优化。小优化1: 高精度压位。 我是用long long压原创 2014-12-12 19:01:00 · 473 阅读 · 0 评论