
ACM_数论
文章平均质量分 75
逍遥丶綦
这个作者很懒,什么都没留下…
展开
-
欧拉函数 hdu3501 Calculation 2
题意:求比n小的且与n不互质的数之和这里有一个公式比n小的且与n互质的数之和等于n*phi(n)/2,其中phi是欧拉函数那这题就很好做了。具体推出公式看下图#include#include#include#include#include#include#include#includeusing namespace std;typedef l原创 2015-07-28 10:05:17 · 957 阅读 · 0 评论 -
匈牙利最大匹配+大质数判定 csu1552 Friends
传送门:点击打开链接题意:每个人都有一个数字,如果两个人的数字之和是质数,那么就可以成为朋友,一个人最多只能有一个朋友思路:二分图裸匈牙利最大匹配和大质数判定的模板题,测试模板专用#include#include#include#include#include#include#include#include#include#include#include#incl原创 2015-10-06 09:22:01 · 826 阅读 · 0 评论 -
高斯消元 hihoCoder1195 高斯消元·一
传送门:点击打开链接思路:高斯消元。。没学线代前看了好久的高斯消元都没看懂,感觉线代书里的高斯消元讲的详细多了。。然后网上找过关于高斯消元的代码,几乎没有能返回是否有解,有几组解等的代码-_-然后今天写了一天,也总算完成了大概的思路也就是做出梯形矩阵,然后判断矩阵的秩,详细推荐参考线性代数的书会比较好如果不想弄懂也行,,反正模板已弄好了,以后可以直接套模板下面是模板in原创 2015-09-08 12:07:19 · 1235 阅读 · 0 评论 -
快速矩阵幂+DFS构造矩阵+大数 ACdream1214 Nice Patterns Strike Back
传送门:点击打开链接题意:告诉你矩阵大小是n*m,要求矩阵中不能有2*2的白色子矩阵或者黑色子矩阵,最后种类数模P思路:如果不是大数,这道题还是非常有意思的。。对于专门卡C++的题目也是醉了...因为n太大了,而m最大也只有5,很明显是大数上的快速矩阵幂。问题是如何构造出矩阵出来,之前做过骨牌的题目,就是利用DFS来构造的,感觉这道题在思路上是一样的,同样也是利用DFS先构造出矩阵原创 2015-08-25 19:20:40 · 1129 阅读 · 0 评论 -
数论 Codeforces604D Moodular Arithmetic
传送门:点击打开链接题意:告诉你p和k,其中(0思路:首先这个怎么看都跟循环节有关。。那么怎么找到循环节呢。。首先找k为0的情况,可以发现此时答案就是p^(p-1)然后k为1的情况,答案就是p^p如果k>=2很明显可以发现f(0)=0是肯定的假设k^r%p=1,r是最小满足这个条件的正整数那么f(x),因为f(x)在[0,p-1]内,所以f(x)原创 2015-12-02 10:45:34 · 1022 阅读 · 0 评论 -
排列组合 nbut1652 Coloring
传送门:点击打开链接题意:有n*m网格,现在要给网格染色,一共k种颜色。要求任意两个曼哈顿距离为奇数的点对的颜色不能相同。思路:给网格黑白染色,可以分成两个黑白相间的部分,这两个部分的颜色不能有交集。我们首先要明白,如何把”n个不同的小球,分到m个不同的箱子,且不能有空箱子“这个经典问题做出来,不会可以看这里点击打开链接如果会这个,那就很容易处理了。我们先枚举第一部分使用的颜色原创 2016-02-12 16:02:21 · 886 阅读 · 0 评论 -
费马小定理 Codeforces615D Multipliers
传送门:点击打开链接题意:这些质数的乘积所组成的那个数,求这个数的所有约数的乘积,取模1e9+7思路:先分别求出每个数出现的个数,那么对于这一类的数,计算它对答案的贡献。首先,假如最多有s个这样的数字,假设这个数为a,那么我要考虑,对于一个约数,出现了1次,2次......s次,然后其他的质数的出现情况有多少种呢,假如其他质数出现的次数为cnt[i],那么就有P = (cnt[1]+1)*原创 2016-01-09 22:02:09 · 1072 阅读 · 2 评论 -
反素数 51Nod1060 最复杂的数
传送门:点击打开链接题意:把一个数的约数个数定义为该数的复杂程度,给出一个n,求1-n中复杂程度最高的那个数。例如:12的约数为:1 2 3 4 6 12,共6个数,所以12的复杂程度是6。如果有多个数复杂度相等,输出最小的。思路:原来,这个叫反素数。反素数的详细介绍看这里点击打开链接有了反素数的性质,我们就能DFS搜了#include #include #includ原创 2016-04-07 19:55:01 · 1127 阅读 · 0 评论 -
前缀和+抽屉定理 51Nod1103 N的倍数
传送门:点击打开链接题意:一个长度为N(例如:N = 8,数组A包括:2 5 6 3 18 7 11 19,可以选2 6,因为2 + 6 = 8,是8的倍数。思路:以前看过抽屉定理,觉得这个定理废话。但是看到这道题,感觉真的好神!因为只有n个数,如果这n个数中,有其中一个数%n为0,那么肯定是直接输出如果所有的数%n都不为0,那么就可能为1~n-1里的任何一个,但是有n个数。原创 2016-04-07 23:01:10 · 1041 阅读 · 1 评论 -
DFS+dp 51Nod1448 等幂映射
传送门:点击打开链接题意:等幂映射是这样定义的,对于一个映射 g : {1,2,...,n} → {1,2,...,n} ,对于所有的 x∈ {1,2,...,n} , g(g(x))=g(x)始终成立。 f(k)(x) 表示将映射f作用于x上k次的结果。一般的, f(1)(x) = f(x), f(k)(x) = f(f(k−1)(x)) 对于所有的k>1成立。现在给定一个映射 f原创 2016-04-08 14:04:34 · 456 阅读 · 0 评论 -
质数筛 51Nod1441 士兵的数字游戏
传送门:点击打开链接题意:两个士兵正在玩一个游戏,游戏开始的时候,第一个士兵为第二个士兵选一个正整数n。然后第二个士兵要玩尽可能多的轮数。每一轮要选择一个正整数x>1,且n要是x的倍数,然后用n/x去代替n。当n变成1的时候,游戏就结束了,第二个士兵所得的分数就是他玩游戏的轮数。为了使游戏更加有趣,第一个士兵用 a! / b! 来表示n。k!表示把所有1到k的数字乘起来。那么第二个士兵原创 2016-04-09 22:33:51 · 614 阅读 · 0 评论 -
容斥定理 njust1923 triple
传送门:点击打开链接题意:给n,m,求1~n中选3个不相等的数出来,3个数的最大公约数等于m的组合数有多少。(n, m 思路:我们很容易通过组合,可以求出,3个数的最大公约数是i的倍数的组合数,即C(n/i, 3)但是,我们需要的是最大公约数是m的组合数,所以我们先通过求出m的倍数的,然后把其他倍数的个数减去就行了所以我们倒着做就ok了,复杂度O(nlogn)#include原创 2016-04-18 18:44:16 · 463 阅读 · 0 评论 -
排列组合 "n个球放入m个盒子m"问题 总结
求,盒子都可以分成是否不能区分,和能区分,还能分成是否能有空箱子,所以一共是8种情况,我们现在来一一讨论。1.球同,盒不同,无空箱C(n-1,m-1), n>=m0, n使用插板法:n个球中间有n-1个间隙,现在要分成m个盒子,而且不能有空箱子,所以只要在n-1个间隙选出m-1个间隙即可2.球同,盒不同,允许空箱C(n+m-1,m-1)我们在原创 2016-02-12 15:11:17 · 61493 阅读 · 17 评论 -
排列组合 hdu5698 瞬间移动
传送门:点击打开链接题意:只能往右下走,一次可以走很远。求从(1,1)走到(n,m)的步骤数思路:枚举走的步数,假如为x那么,对于行,我要从1通过x步走到n对于列,我要从1通过x步走到m这两个操作是独立的,所以可以乘起来那么现在题目就变成了,求从1到n通过x步的方案数,其实就是把n-1个一样的小球放到x个不一样的箱子中,箱子不能留空的方案数,也就是一个经典的排列组合问题了原创 2016-05-23 01:17:33 · 1807 阅读 · 1 评论 -
快速幂 hdu5690 All X
传送门:点击打开链接 题意:问F(x,m)F(x, m)代表一个全是由数字xx组成的mm位数字。请计算,以下式子是否成立:F(x,m) mod k ≡ cF(x,m)\ mod\ k\ \equiv \ c 思路:相当于10m−19∗x%k≡c\frac{10^{m}-1}{9}*x \% k \equiv c是否成立 其实这个公式相当于(10m−1)%9k9∗x%k=c%k\frac{(1原创 2016-05-23 01:50:35 · 948 阅读 · 0 评论 -
逆元+公式推导 zoj3903 Ant
传送门:点击打开链接题意:一个立方体,已知立方体最长边长为n,一只蚂蚁从一个顶点走到对角线的另一个顶点,且走的是最短的路线,记路线长度为L。那么所有满足题意的情况的L*L之和是多少思路:再去推导一下就发现,其实就是L^2=n^2+(a+b)^2,且a由于n太大了,所以只能是数学的角度推导公式(a+b)^2拆成a^2+b^2+2*a*b剩下的大概就是把每一部分都累加起来,然后答案原创 2015-10-12 15:40:55 · 1405 阅读 · 2 评论 -
数论+dp状压 Codeforces510D Fox And Jumping
传送门:点击打开链接题意:从n张卡中取出一些卡,使得k1*x1+k2*x2+...+kn*xn=1,问是否能找出这样的卡,并且使费用最低思路:这里首先必须要知道一个数论知识,gcd(x1,x2,x3..,xn)=1,那么必有k1*x1+k2*x2+...+xn=1。证明就不证明了,但是确实有个特例,gcd(x,y)=1,那么xm+yn=1必有解,是不是很熟悉?就是扩展欧几里德啊!前者也算是原创 2015-10-09 20:37:08 · 1120 阅读 · 0 评论 -
Lucas定理+中国剩余定理 hdu5446 Unknown Treasure
传送门:点击打开链接题意:求C(n,m)%p,其中n思路:这题出的非常好,也揭示了如何处理p不是质数的方案。可以用lucas求C(n,m) n#include#include#include#include#include#include#include#include#include#include#include#include#include#defin原创 2015-09-14 00:12:32 · 805 阅读 · 0 评论 -
求约数 hdu2601 An easy problem
这题有两种方法,一种是直接sqrt(n)的复杂度求约数数量还有一种当然是比较快的方法,通过质因数分解求约数数量为什么是求约数数量呢可以发现 n+1=(i+1)*(j+1) 所以我们只需要求出约数的数量,就能知道i+1有多少种情况了,然后还需要讨论一下假如n是12,约数有1,2,3,4,6,12那么,因为是偶数个约数,所以总是两两配对的,一共有3对,所以i+1可能为1原创 2015-07-28 10:49:23 · 1042 阅读 · 0 评论 -
贪心+组合数 hdu4869 Turn the pokers
这种题目数据范围都非常大,一般不是dp就是组合数然后可以看到,翻牌并不要求一定要是连续的,所以可以任意翻,那么必然在奇偶性上就可以做文章求出翻完所有后,1的个数为最小为L,最大为R,且L和R的奇偶性相同。那么答案就是for(int i=L;i因为最多能有R个1,如果在中间操作时,2个操作我可以一个选择0,一个选择1,换句话说,偶数步操作可以忽略一部分所以[L,R]都是可原创 2015-07-18 11:37:24 · 915 阅读 · 0 评论 -
质数筛 nbut1454 Lux
传送门:点击打开链接题意:给出区间[L,R],R-L思路:筛[L,R]区间中的全部质数,然后再遍历一遍#include#include#include#include#include#include#include#include#include#include#include#include#define FIN freopen("input.txt","r"原创 2015-08-25 22:36:48 · 1049 阅读 · 0 评论 -
递推 ACdream1420 High Speed Trains
传送门:点击打开链接题意:n个点,每个点至少被一条边覆盖,不存在自环和重边。问有多少种情况一个非常有意思的递推,其实可以利用容斥的思想去考虑这道题目设F[n]表示为n个点的情况数,那么最多会存在n*(n-1)/2条边,这些边中,每条边都是可有可无。如果不考虑不满足条件的情况(也就是有的点没有被边覆盖的情况),可能的情况数为pow(2,n*(n-1)/2),也就是考虑每一条边是否存在原创 2015-08-27 14:52:01 · 952 阅读 · 0 评论 -
组合数学 codefoeces300C Beautiful Numbers
...刚开始没看清题意,,原来excellent的前提是good...我们来认为那个长度为n位的数字为A,A的每一位之和称为B首先,我们需要分两种情况来讨论。第一种情况,当a等于b时,说明A里那n位数字全部是a也就是说,B的值等于a*n,我们只需要验证现在B中每一位的数字是否都等于a就可以了如果都等于,那么答案就是1,否则答案就是0第二种情况,当a不原创 2015-08-13 23:02:57 · 1486 阅读 · 0 评论 -
容斥定理 hdu1796 How many integers can you find
因为数据比较小,我的方法非常蠢。。直接枚举M个数的集合的子集,记为s然后球子集s里的数的最小公约数,并统计里面的数量,记为cnt然后看小于n的数中,有多少个最小公约数的倍数,记为t看cnt的奇偶性,奇数就加t,偶数就减t(容斥定理)然后就做完了,因为数据小,对于这题复杂度足够了#include#include#include#include#include原创 2015-08-14 21:50:50 · 833 阅读 · 0 评论 -
扩展欧几里德 poj1061 青蛙的约会
扩展欧几里德非常经典,但是也有时候挺难用的。一些东西一下子想不明白。。于是来了一个逆天模板。。只要能列出Ax+By=C,就能解出x>=bound的一组解了~LL exgcd(LL a, LL b, LL &x, LL &y) { if(b == 0) { x = 1; y = 0; return a; } LL r = exgcd(b原创 2015-08-15 09:49:16 · 1512 阅读 · 3 评论 -
组合数学+递推式 hdu2068 RPG的错排
我的思路是这样的:枚举正确的个数i,然后从n个位置中选择i个位置,C(n,i)那么剩下的n-i个位置,都不是答案,我们暂时成为错位排列现在的难点就在于,如何球错位排列设F[i]表示i个数字,错位排列的种类数那么,先只考虑前i-1个数字错位排列,暂时在第i个位置把数字i放上,此时是不合法的因为i第i个位置不能放i,所以要考虑把i和其他数字调换位置在前i-1个位置中,选原创 2015-08-14 21:45:25 · 1402 阅读 · 0 评论 -
polya定理 poj2409 Let it Bead
很经典的一道polya定理的题目,,以前看到这种具有对称性求个数的题目完全没法动。学了polya定理就能愉快的玩耍了。polya定理很容易用,,大概就是一个这样的规律,先把所有的变换后颜色不变的情况写出来,比如这题就是:1.如果旋转1下,前后颜色都不变2.如果旋转2下,前后颜色都不变........n.如果旋转n下,前后颜色都不变如果n是奇数,且对着每条角平分线对折原创 2015-08-04 09:53:43 · 850 阅读 · 0 评论 -
推导公式 hdu2298 Toxophily
刚开始想用二分去做,却没有证明单调性如果非要用二分做,应该先用三分找到最顶端的点,然后再二分,这样太麻烦了,其实,可以一个公式搞定y=x*tanα-gx*x/(2*v*v*(cosα)*(cosα))相信这一步大家都能推出来,然后问题来了1/(cosα*cosα),1等于sinα^2 + cosα^2那么1/(cosα*cosα)就到等于(sinα^2 + cosα^2)/原创 2015-07-24 10:05:06 · 1526 阅读 · 0 评论 -
gcd vijos1279 Leave-绿光
传送门:点击打开链接仔细想一想过程,如果a>b,肯定是在a-b的位置切一刀,这样可以切出一个边长为b的正方形出来,那么还会剩下一个变长分别为b a-b的长方形,然后继续操作仔细想想,不就是辗转相减法么= =然后画了个图模拟了一下找了一下规律,马上就能发现答案是m + n - gcd(m,n)#include#include#include#include#inclu原创 2015-08-16 13:11:51 · 962 阅读 · 0 评论 -
质数筛选 poj3006 Dirichlet's Theorem on Arithmetic Progressions
。。今晚练习简直就是模板测试专题,又测了两个质数模板,,发现线性筛的那个模板弄错了,,于是改了一下,修正过来了因为这题已经告诉你了答案不会超过1e6,所以就把1e6的质数全部筛选出来,就可以通过O(1)方法判断是否是质数,然后暴力枚举质数个数就可以了#include#include#include#include#include#include#includeusi原创 2015-07-25 00:20:42 · 872 阅读 · 0 评论 -
中国剩余定理 vijos1164 曹冲养猪
中国剩余定理的第一个模板。这个模板比较简单,求的是一系列的模方程组x % m = a用这个模板有几个前提。1:必须两两互质2:全部乘起来不能爆long long#include#include#include#include#include#include#include#include#include#include#include#incl原创 2015-08-16 18:20:54 · 1695 阅读 · 0 评论 -
容斥定理 hdu2204 Eddy's爱好
传送门:点击打开链接很明显会有大量重复的被计算,所以很容易就想到容斥定理。我们设dp[i]表示能表示成M^i(i>1)且i是这个数字能表示出来的最大的情况时的总类数比如,27拆成M^K时的K最大能表示成3,所以27这个数字分在dp[3]这一类1我们暂时不考虑,不把它放在任何一类因为K>1,所以K至少是2,最大是2^K=N的时候,所以K最大等于log2(N),所以K非常的原创 2015-08-18 20:58:04 · 1207 阅读 · 0 评论 -
积性函数 hdu5528 Count a * b
积性函数太有趣了! 做这个题之前,我们需要掌握一些基本知识。 1.若f(x)为积性函数,那么满足f(xy)=f(x)f(y) 2.若f(x)为积性函数,g(x)=∑d|xf(d)g(x)=\sum_{d|x}f(d),那么g(x)也为积性函数 3.学会如何线性处理积性函数。 4.对于积性函数,目标就是学会如何求f(pq)f(p^q),p为质数回到这个题,我们先考虑求f函数原创 2017-11-07 21:01:11 · 815 阅读 · 0 评论