
数学——数论
文章平均质量分 78
XDU_Skyline
Everything is over, everything is just beginning.
展开
-
例题10-2 不爽的裁判 UVa12169
1.题目描述:点击打开链接2.解题思路:本题要求找到合适的一组a,b,使得按照递推公式能输出正确的x2,x4...可以枚举a值,通过列写方程得到b的值,但这里有一个问题,这里是一个同余方程,等号的一端带有k*10001,这时就应该迅速的想到利用扩展gcd来解决,已知量为1001,a+1,求出gcd(10001,a+1)以及线性方程的系数x,y即可。当发现计算出的数和原来的输入矛盾时,说明a是非原创 2015-02-20 12:31:35 · 1243 阅读 · 0 评论 -
HDU 4427 Math Magic (2012年长春现场赛H题)
1.题目描述:点击打开链接2.解题思路:本题要求寻找k个正整数,它们的和恰好是N,它们的LCM恰好是M的解的个数。可以设置一个三维的dp来解决。用dp(i,j,k)表示选择i个数,它们的和恰好是j,它们的LCM恰好是k的个数。那么答案就是dp(k,n,m)。不过这里介绍一种利用状态压缩思想求解的方法。通过题意可以发现,N,M的范围都比较小,不超过1000,而1000之内的所有数的不原创 2015-08-27 00:04:23 · 1229 阅读 · 0 评论 -
HDU 5381 The sum of gcd (2015年多校比赛第8场)
1.题目描述:点击打开链接2.解题思路:本题利用莫队算法解决。由于是第一次学习这个算法,因此研究了比较长的一段时间才弄懂。首先,莫队算法解决的问题是无修改的离线区间查询问题。该算法实际上是由曼哈顿距离最小生成树演变来的,由于要处理m个区间,可以将这m个区间看做二维平面上的点,那么处理这m个区间就等价于让这m点连通,且总的转移代价最小。这其实就是一个曼哈顿距离最小生成树问题。经典的曼原创 2015-08-15 13:26:43 · 2047 阅读 · 0 评论 -
#290 (div.2) D. Fox And Jumping
1.题目描述:点击打开链接2.解题思路:本题利用扫描与维护解决。根据题意,能够走到所有的格子,一定是挑选出来的牌的步数的最大公约是1,这点很好理解。因为ax+by=1意味着只要有a个x和b个y就可以凑出来步数1。这样以来,只需要利用map来存储所有的公约数对应的最小费用即可。初始时刻base[0]=0,接下来就是从前往后扫描一遍这n个数,然后依次更新base中的每一个最大公约是对应的最小费用即原创 2015-04-12 23:24:59 · 575 阅读 · 0 评论 -
例题6.19 有趣的杨辉三角 UVa1384
1.题目描述:点击打开链接2.解题思路:本题要求计算C(n,0)...C(n,n)当中有多少个数不能被p整除。可以利用Lucas定理解决。通过Lucas定理,我们知道,如果C(n,m)不能被p整除,那么在n,m的p进制表示法中,每一个ni都满足ni>=mi,这样,每一位只有ni+1个整数可以满足该关系式,通过乘法原理不难得知最终的答案是(n0+1)(n1+1)..(np-1+1)。3.代码原创 2015-09-01 18:48:40 · 557 阅读 · 0 评论 -
例题6.20 信息解密 UVa1457
1.题目描述:点击打开链接2.解题思路:本题是一道模拟+数论的综合题。因此可以数论部分和模拟部分分开进行。首先,除去日历,其实本题就是要求解x^q≡a (mod p)。这需要用到数论中原根的知识,读者可以网上或者初等数论书中找到相应的内容。假设我们现在已经有了p的原根m,那么该如何求解呢?可以用离散对数的方法来做,方程两边同时取m的离散对数,得q*x'≡a'(mod p-1)。这里的x'就是x原创 2015-09-01 21:37:45 · 540 阅读 · 0 评论 -
HDU 5478 Can you find it (2015年上海赛区网络赛K题)
1.题目描述:点击打开链接2.解题思路:本题利用枚举法+随机数解决。通过分析可以发现,一个a只对应一个b,因此不妨枚举a,在n=1时候求出相应的b,接下来只需要在[1,C)范围内用随机数检测等式是否恒成立即可。通过尝试发现,用随机数测试500次即可。3.代码:#define _CRT_SECURE_NO_WARNINGS#include#include#include#incl原创 2015-09-26 19:30:35 · 566 阅读 · 0 评论 -
HDU 5407 CRB and Candies (2015年多校比赛第10场)
1.题目描述:点击打开链接2.解题思路:本题要求LCM(C(n,0), C(n,1),..., C(n,n)),官方题解是转化为求解LCM(1,2,3,...n+1)/(n+1),然而这种做法还是觉得太陌生,不妨试着用学过的唯一分解定理去做。首先,求这n+1个数的LCM,实际上就是求所有小于n的素数中,对于每一个素数Pi,哪一项的指数最大,然后把他们连乘起来即可得到LCM值。因此,原创 2015-08-21 15:41:29 · 661 阅读 · 0 评论 -
例题2.9 最大公约数之和 UVa11426
1.题目描述:点击打开链接2.解题思路:本题利用线性筛+打表解决。设f(n)=gcd(1,n)+gcd(2,n)+...+gcd(n-1,n).那么最终的答案就是S(n)=f(2)+f(3)+...+f(n)。因此,只需要快速计算f(n),即可递推得到所有答案。注意到gcd(x,n)是n的约数,我们不妨利用约数来分类计数。令g(n,i)表示gcd(x,n)=i且x3.代码://#pra原创 2015-08-23 00:01:43 · 959 阅读 · 0 评论 -
HDU 5446 Unknown Treasure (2015年长春赛区网络赛J题)
1.题目描述:点击打开链接2.解题思路:本题利用Lucas+CRT+移位乘法解决。然而。。。比赛时候意识到了可能会爆long long,但是还没学移位乘法,受到了100点伤害==3.代码:#define _CRT_SECURE_NO_WARNINGS#include#include#include#include#include#include#include#incl原创 2015-09-13 16:33:32 · 776 阅读 · 0 评论 -
HDU 5468 Puzzled Elena (2015年上海赛区网络赛A题)
1.题目描述:点击打开链接2.解题思路:本题利用dfs序+容斥原理+前缀和性质解决。题目中要求每个结点,和多少个它的子结点互素。如果每次为了求一个点去跑一遍dfs,复杂度将是O(N(N+M))。一定会超时。因此需要深入加以分析。注意到n的范围是10^5以内的,因此可以事先用线性筛求出每个数含有哪些素因子。接下来,我们尝试利用dfs序来求解。设num[i]表示遍历到当前结点时候,含有因数i(注意原创 2015-10-01 22:54:53 · 678 阅读 · 0 评论 -
LA4384 Business Cards
1.题目描述:点击打开链接2.解题思路:本题需要一点仔细的分析。很容易想到可以从边长的整除性上去考虑,然而这样还不够,可以发现存在一种情况是小矩形既有横着摆放的,也有竖着摆放的。那么我们就按照摆放方式进行分类讨论:(1)全部都是横着放或全部都是竖着放,那么只需要判断c,d是否分别整除a,b或b,a即可;(2)一部分是横着放,一部分是竖着放;这种情况比较复杂,需要仔细的分析。首先一点原创 2015-10-18 21:34:01 · 540 阅读 · 0 评论 -
LA4998 Simple Encryption
1.题目描述:点击打开链接2.解题思路:本题是一道非常好的思维题。猛一看感觉好像没有什么特别好的方法,但是如果仔细观察这个方程,就会发现要求解的x实际上是一个不动点,只要找到了这个不动点,以后就会稳定的这个地方。所以可以一开始选择一个比10^12大的数,开始不停的迭代,直到是一个稳定点时候break即可。类似于牛顿法求高次方程的根。3.代码:#include#include#inc原创 2015-10-19 22:58:48 · 614 阅读 · 0 评论 -
UVa10692 Huge Mods
1.题目描述:点击打开链接2.解题思路:本题利用欧拉定理解决。根据题意,我们需要递归地计算每一个取模后的指数,然后再进行快速幂得到最终的答案。由欧拉定理知,我们只需要计算指数模phi(MOD)的结果即可,但是有一个细节需要注意,如果gcd(a,MOD)>1,那么需要先计算出a^phi(MOD)%MOD的结果r,那么可以知道,r^k%MOD恒等于r,这样,再把结果乘上r,就是最终的答案。本题即可原创 2015-10-19 16:17:05 · 759 阅读 · 0 评论 -
UVa11728 Alternate Task
1.题目描述:点击打开链接2.解题思路:本题可以事先打表计算出所有的数的正因子之和,然后查询即可。这里的问题是,为什么这么做就是可行的。尝试算出几个因数和之后我们会发现,如果因数和相同,那么直接更新的话自然会取较大者,因此答案是正确的。3.代码:#include#include#include#include#include#include#include#include原创 2015-10-20 11:35:41 · 461 阅读 · 0 评论 -
HDU 5451 Best Solver (2015年沈阳赛区网络赛B题)
1.题目描述:点击打开链接2.解题思路:第一次做这类通过矩阵求解整数部分的题目,学习了。首先是如何求(5+2sqrt(6))^n的整数部分,这里可以参考如下的博客链接:点击打开链接接下来,本题还有另外一个难点就是如何降低指数的次数。由于我们已经把问题变换为了通过矩阵快速幂来求解,而且根据线性递推数列取模后均为周期序列的结论,本题的矩阵也存在周期性,看到网上有的是根据群论的知识直接算原创 2015-10-21 00:14:16 · 678 阅读 · 0 评论 -
例题2.8 总是整数 LA4119
1.题目描述:点击打开链接2.解题思路:本题利用差分序列的性质解决,将1,2,..,k+1都带入表达式计算,如果对所有的i,都有D整除P(i),那么该序列所有值都为整数,否则不都为整数。因为如果某一项不能整除,那么d^kP(i)就不是整数,因此不总是整数。不过本题的一个难点在于如何解析表达式,可以发现,多项式的构成都符合an^k的形式,因此可以对第i项,找到它的系数a[i]和指数p[i],从而原创 2015-08-22 23:07:59 · 796 阅读 · 0 评论 -
超级幂 UVa11752
1.题目描述:点击打开链接2.解题思路:本题要求找出1~2^64-1之间所有的超级幂。根据题意,不难知道这样的数的幂次一定是一个合数。而最大的幂次肯定不超过64,因此只需要去除4~64之间所有的素数即可,而这些素数可以事先打表。接下来开始枚举底数和幂次。由于幂次最多只有不超过60个,每个幂次对应的底数不超过10^5个,因此时间复杂度可以承受。但这里还有一个问题:如何知道枚举到哪个幂次就停止原创 2015-05-22 10:45:41 · 2545 阅读 · 0 评论 -
例题10-5 GCD等于XOR UVa12716
1.题目描述:点击打开链接2.解题思路:本题能用的判断条件只有两个:(1)gcd(a,b)=c;(2)(a^b)=c;通过观察容易发现如果gcd(a,b)=(a^b)=c,那么c=a-b,因此可以事先枚举所有a的因数c,利用b=a-c计算b,然后只需验证是否满足(a^b)==c即可。但本题的数据太大,而且枚举约数不容易,因此可以利用约数c枚举倍数a,这样就会方便很多,打表的效率也足够高;而且,原创 2015-02-20 22:46:10 · 836 阅读 · 0 评论 -
例题10-3 选择与除法 UVa10375
1.题目描述:点击打开链接2.解题思路:本题让计算两个组合数的商,既可以直接利用公式,也可以利用唯一分解定理:事先计算10000以内的所有素数,然后计算组合数分解后各个素数的幂,用数组e保存指数即可。这里计算指数时可以利用数论中求n!分解式中各个素因数指数的公式。3.代码:(利用唯一分解定理)#define _CRT_SECURE_NO_WARNINGS #include#in原创 2015-02-20 13:51:13 · 872 阅读 · 0 评论 -
例题10-4 最小公倍数的最小和 UVa10791
1.题目描述:点击打开链接2.解题思路:本题要求找至少两个整数,使得它们的最小公倍数是n。本题看似简单,但还是应该注意细节,考虑周密。当n=1时答案是2,当n只有一种素因子时答案是n+1,由于n的最大范围是2^31-1,因此保险起见用long long防止溢出。3.代码:#define _CRT_SECURE_NO_WARNINGS #include#include#includ原创 2015-02-20 20:46:56 · 985 阅读 · 0 评论 -
例题10-1 巨大的斐波那契数! UVa11582
1.题目描述:点击打开链接2.解题思路:由于是模运算,因此整个序列肯定会出现重复序列,事先可以枚举周期T,然后利用pow_mod的算法快速计算a^b(mod T)的结果p,返回F[p]即可。3.代码:#define _CRT_SECURE_NO_WARNINGS #include#include#include#include#include#include#includ原创 2015-02-19 21:42:06 · 850 阅读 · 0 评论 -
例题10-7 交表 UVa10820
1.题目描述:点击打开链接2.解题思路:本题实质上是要求满足1≤x,y≤n,且x,y互素的个数。除了(1,1)外,其余的x,y各不相同。设x3.代码:#define _CRT_SECURE_NO_WARNINGS #include#include#include#include#include#include#include#include#include#incl原创 2015-02-24 23:34:51 · 671 阅读 · 0 评论 -
例题10-6 无关的元素 UVa1635
1.题目描述:点击打开链接2.解题思路:通过试验可以发现,本题等价于求解C(n-1,i)的组合数中有哪些是m的倍数,可以利用唯一分解定理来判断:事先分解m,随后利用递推式计算每一项中包含m的素因数的指数即可。3.代码:#define _CRT_SECURE_NO_WARNINGS #include#include#include#include#include#includ原创 2015-02-24 21:49:47 · 1681 阅读 · 1 评论 -
习题10-4 素数间隔 UVa1644
1.题目描述:点击打开链接2.解题思路:根据题意可知最大的素数在int范围内,可以先算出1299709以内的所有素数,随后二分查找n附近的素数的位置即可。3.代码:#define _CRT_SECURE_NO_WARNINGS #include#include#include#include#include#include#include#include#includ原创 2015-02-26 23:25:15 · 985 阅读 · 0 评论 -
习题10-7 几乎是素数 UVa10539
1.题目描述:点击打开链接2.解题思路:本题要求找在区间[L,R]中素因子只有一个且自身不是素数的数,这实际上就是找素因子的幂次大于1的数在该区间中有几个。可以利用前缀和的思想,用cal(k)表示不超过k的这样的数有几个,那么最终的答案就是cal(R)-cal(L-1)。而cal()函数可以通过逐一尝试素数计算最大幂次来得到。当p>sqrt(k)时即可停止枚举。注意要用long long输原创 2015-04-21 00:07:57 · 817 阅读 · 0 评论 -
习题10-6 连续素数之和 UVa1210
1.解题思路:点击打开链接2.解题思路:本题要求寻找连续个素数相加为n的个数。由于n的范围不大, 因此可以事先打表。计算好所有的连续和的个数,最后直接输出即可。3.代码:#define _CRT_SECURE_NO_WARNINGS #include#include#include#include#include#include#include#include#inc原创 2015-04-21 13:15:26 · 1241 阅读 · 0 评论 -
习题10-9 约数 UVa294
1.题目描述:点击打开链接2.解题思路:本题利用暴力搜索解决。因为题目中R-L最大不超过10000,可以直接进行搜索。并用ans,p分别标记目前找到的约数最多的个数以及对应的整数。因此关键问题是如何快速计算一个整数n的正约数的个数。方法是这样的:可以从2开始尝试,如果n包含这个素数,那么就把它“除干净”,这样既可保证后面找到的因子均为素数,只需要枚举到sqrt(n)时即可停止。这样做的好处原创 2015-04-21 14:27:15 · 779 阅读 · 0 评论 -
习题10-18 一个研究课题 UVa10837
1.题目描述:点击打开链接2解题思路:本题利用欧拉函数的性质暴力搜索求解。首先,根据 phi(n)=pk11(p1−1)∗pk22(p2−1)∗pk33(p3−1)....可知,n中的所有素因子p必须满足phi(n)%(p-1)==0这一条件。因此可以事先将所有这样的素数找出来,然后在这些素数的基础上进行暴力搜索,来枚举哪些素数用与不用。如果用了,还要枚举所有的合法的使用次数。这看上去时间原创 2015-04-22 00:28:48 · 1055 阅读 · 0 评论 -
最大公约数和最小公倍数 UVa11388
1.题目描述:点击打开链接2.解题思路:本题通过观察发现,如果两个数a,b的最大公约数是G,那么G≤a且G≤b。因此直接令a=G即可。如何判断是否有解呢,只需要看是否满足gcd(G,L)==G就行了。如果满足,b=L。3.代码:#define _CRT_SECURE_NO_WARNINGS #include#include#include#include#include#i原创 2015-05-20 15:50:08 · 591 阅读 · 0 评论 -
最小公倍数 UVa11889
1.题目描述:点击打开链接2.解题思路:本题要求寻找最小的B,使得lcm(A,B)=C。这里容易想当然地认为B=C/A就是答案。实际上是错误的做法。因为lcm(A,C/A)不一定等于C,如果想让lcm(A,C/A)==C,必须有gcd(A,C/A)==1。通过恒等式a*b==gcd(a,b)*lcm(a,b)即可证明。这就提示我们得到临时的B之后,要想办法将A,B变为互素的两个数。还是利用恒等原创 2015-05-20 15:53:47 · 778 阅读 · 0 评论 -
幂和阶乘 UVa10780
1.题目描述:点击打开链接2.解题思路:本题利用唯一分解定理及n!的指数的计算公式解决。可以想象,如果我们把m写成若干个素数乘积的形式,那么m^k就相当于对每一个素数的指数都乘上k。因此k实际上取决于幂次最大的那个素数。那么如何求解p^k'恰好整除n!时候的指数呢?可以利用数论中的定理k'=[n/p]+[n/p^2]+[n/p^3]+...。由于后面无穷项都是0,因此这是一个有限值,可以通原创 2015-05-22 10:25:53 · 1355 阅读 · 1 评论 -
LCM的个数 UVa10892
1.题目描述:点击打开链接2.解题思路:本题要求统计有多少个a,b,使得lcm(a,b)=n,其中n是给定的一个整数。不难发现,这里的a,b一定都是n的约数。根据题目给定的范围,不妨事先计算出所有的约数,。接下来利用二重循环枚举约数即可。注意:由于还要满足a≤b。那么只需要算出不超过sqrt(n)的所有约数即可,剩下的部分可以根据约数的对称性得到。这样的约数肯定不超过1000个,时间可以承受。原创 2015-05-22 10:35:37 · 865 阅读 · 0 评论 -
HDU 5447 Good Numbers (2015年长春赛区网络赛K题)
1.题目描述:点击打开链接2.解题思路:本题利用唯一分解定理+gcd解决。这是我第一次用Java写题,忙了一下午终于通过了,真是太不容易了==。本题实际上就是把k1,k2分解后,把所有素因子的指数相乘就是答案。然而,k1,k2的范围太大了,高达10^24,为了方便使用大整数,直接上Java。接下来就是考虑如何高效分解k1,k2了,注意到题目中给了一个条件:k1,k2的最大的素因子是相同的,原创 2015-09-17 19:47:42 · 1701 阅读 · 0 评论