数论例题选讲
标签:
题目一:[[CQOI2007]余数求和]
(https://www.luogu.org/problemnew/show/2261)
一道比较套路的数论分块题目。
题目二:[hdu2866][Special Prime]
(https://vjudge.net/problem/HDU-2866)
题意:在区间[2,L]内,有多少个素数p,满足方程(n^3+n^2p=m^3)有解。((l<=10^6))
(n^2(n+p)),我们可以对n中含不含p质因子进行讨论。
若(p|n),那么设(n=ap).
(a^3p^2(p+1)=m^3)很明显没有正整数解。
所以(p不被n)整除,那么((n+p,n^2)=1)
所以设(n+p=a^3,n^2=b^6,即n=b^3)
(p=a^3-b^3=(a-b)(a^2+ab+b^2))
所以(a-b=1),(p=(b+1)^3-b^3),
枚举b即可。
题目三:http://poj.openjudge.cn/practice/1046/
题意:给定b,求最大的a,使(a(a+b)=m^2)有解,(b<=10^9,T<=10^3)
与上题同样的套路。
首先把a,b的最大公约数约掉,即默认((a',b')=1)
那么((a',a'+b')=1),所以同样设(a'=x^2,a'+b'=y^2)
(b'=y^2-x^2,b=d(y^2-x^2),a=dx^2)
然后让(dx^2)大,就枚举d搞就行了。
大约是(O(sqrt b))
事实上,可以把b写成a的某种形式
设(a^2+ab=(a+t)^2)
(ab=2at+t^2)
(a=t^2/(b-2t))
所以t肯定要尽量的大。
当b为奇数,$ 2t=b-1 $
当b为偶数,(4|b) ,$2t=b-4 $
当b为偶数,b不为4的倍数, (2t= b-2)
题目四:[[bzoj4403]序列统计]
(http://www.lydsy.com/JudgeOnline/problem.php?id=4403)
组合数学
小学应该都学过吧.....插板法。
令(x=r-l+1)
答案就是(sum_{i=1}^n C(i+x-1,x-1))
有因为有恒等式(sum_{i=0}^n C(m+i,m)=C(m+n+1,m+1))
所以答案为(C(n+x,x)-1)
然后用Lucas定理。
题目五:
http://poj.org/problem?id=2480
题意:求(sum_{i=1}^n gcd(i,n),n<=10^9)
套路提公因数。
题目六:[[JSOI2008]球形空间产生器]
(http://www.lydsy.com/JudgeOnline/problem.php?id=1013)
高斯消元水题。
题目七:[[HNOI2017]礼物]
(https://www.luogu.org/problemnew/show/3723)
比较板的一道题。
转换题目意思,相当于求一个(kin[0,n-1]),使得
展开,发现只与(sum a_ib_{i+k})有关。
这个怎么求呢,如果把(b_i)倒过来,就是个卷积了。
题目八:[[ZJOI2014]力]
(https://www.luogu.org/problemnew/show/P3338)
注意到(q_i×{[{1 over (j-i]}]}^2)可以变成一个卷积的形式。
只需要设(p_{j-i}={[{1 over (j-i)}]}^2)即可。
注意一下精度问题和(j-i< 0)时的问题。
题目九:[[bzoj2440][中山市选2011]完全平方数]
(http://www.lydsy.com/JudgeOnline/problem.php?id=2440)
容斥原理的简单应用。
二分之后就变成一个简单的容斥问题了。
题目十[[bzoj4591]超能粒子炮改]:
(http://www.lydsy.com/JudgeOnline/problem.php?id=4591)
Lucas定理的基本应用。
其实我的做法与网上的不太一样,而且有点复杂(bzoj上6s......)
题目十一:[[bzoj2301][HAOI2011] Problem B]
(http://www.lydsy.com/JudgeOnline/problem.php?id=2301)
对于给出的n个询问,每次求有多少个数对(x,y)满足
a≤x≤b,c≤y≤d且gcd(x,y)=k
n,a,b,c,d,k<=5w;
就跟二维前缀和一样,是很简单的容斥模型。
题目十二:[[bzoj2154]Crash的数字表格]
(http://www.lydsy.com/JudgeOnline/problem.php?id=2154)
比较套路的莫比乌斯反演。
首先设(f(d)为sumsum ij(gcd(i,j)==d))
那么(F(d)为sumsum ij(d|gcd(i,j)))
由莫比乌斯反演定理可知,(f(i)=sum mu(d/i)F(d))。
然后只需要线性筛出 $ sum_{d|n} mu(d)d$就行了。
顺便提一句,这个做法能够解决多组数据的情况,只需要前缀和一下就能数论分块做了。
题目十三:[[bzoj3994][SDOI2015]约数个数和]
(http://www.lydsy.com/JudgeOnline/problem.php?id=3994)
很全面的一道莫比乌斯反演题目!
这道题难想在一个定理,接下来的分析应该都是很自然的。
因为题目本身形式很难化成与gcd有关,强行提取gcd也没什么用。
将题目形式转换为一个优美的式子
我们再对这个式子分析。
由于u,v都分别是i,j的约数,所以各种优化都颇为不便。
我们可以直接考虑每一组(u,v)做出的贡献。
即转换为
接下来就很容易了,只需要对函数
莫比乌斯反演即可,笔者在这里不再赘述。
题目十四:[[bzoj4816][Sdoi2017]数字表格]
(http://www.lydsy.com/JudgeOnline/problem.php?id=4816)
套路自然是先提出公因数。
为了写的简便设(p=id),即
看到(f和mu)的参数乘起来是p,是不是很舒服,那么我们就枚举p。
那么我们只需要(O(nloglogn))就可以处理出(prod f(d)^{mu(p/d)}),然后舒服的进行前缀和分块优化。
复杂度:(O(nloglogn+Tsqrt n log n))
题目十五:[51nod 1239]欧拉函数之和
(https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1239)
最基本的欧拉函数求前缀和。
记(phi(d)=sum_{i=1}^d varphi(i))
然后杜教筛即可。
题目十六:[51nod 1220 约数之和]
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1220
这一题比之前的那个还要骚。
记$sigma_{p}(x)=sum_{d|x}d^p $
则$sigma_1(nm)=sum_{x|n}sum_{y|m}[gcd(x,y)==1]{xm over y} $
证明什么的就唯一分解定理搞一搞就OK了。
那么
因为$$sum_{i=1}^n ilfloor{n over i}
floor=sum_{i=1}^nsigma_1(i)
\sum_{i=1}^n{ {n over i}({n over i}+1) over 2}=sum_{i=1}^nsum_{j=1}^{n over i}j=sum_{j=1}^nj lfloor {n over j}
floor=sum_{i=1}^nsigma_1(i)
后面那个直接可以分块做,复杂度和杜教筛一样(需要线性筛出前(n^{frac 23})项)。
前面这个直接杜教筛就可以了。
题目十七:[51nod 1222]最小公倍数计数
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1222
先算前缀和。(假设i,j是有序的)
现在还是不能直接做,但是你会发现这里大多数限制条件都是非常松的。
比如p可以从1枚举到n,可是(p^2>=n)时就对答案没有贡献了。
d也只能枚举到(n over p^2),不过可以把i,j的限制改松一点
这样就可以转换成一个三元组((x,y,z))之积小于等于({n over p^2})的问题了。
我们强行令(x<=y<=z),那么最后我们求出(x< y< z),$x < y =z (,
) x=y < z$, $ x=y=z $ 的方案数,再乘个组合数就行了。
求$ x < y < z $ 应该是最慢的,只需要x枚举到 $ n^{ frac 13 } $ ,y枚举到 $ sqrt {n over x}即可 $
那么我们来分析一波复杂度,先看下算里面的这重循环。
这个复杂度不太好放缩,我们直接上积分。
那么$$int_0^{n^{frac 13}} sqrt {n over x}=sqrt n(2 sqrt {n^{frac 13}})=2n^{frac 23}$$
所以里面这个复杂度是(O(n^{frac 23}))的,再来分析一波外面的循环。
无论怎样放缩都是(O(n^{frac 56}))的。
所以......还是来一波积分。
(因为x接近0时函数接近无穷,所以我把1的给加上了)
实际上根本用不着这么麻烦。因为把n提出来后,复杂度大约是(n^{frac 23}sum_{x=1}^n {1 over x^{frac 43}}),而这个数列是收敛的,提供的值只会是一个不大的常数。
所以正如网上所说的那样,这样做法的复杂度就是(O(n^{frac 23}))
题目十八:[51nod 1227] 平均最小公倍数
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1227
推一波式子。
对函数(f(d)=dvarphi(d)),构造函数(g(d)=d)
有$$sum_{i=1}^n(f*g)(i)=sum_{i=1}^ni^2=sum_{i=1}^nsum_{d|i}f(d)g({i over d})=sum_{i=1}^ng(i) sum_{d=1}^{n over i}f(d)$$
然后杜教筛即可。