好的,这一次这个浴谷的夏令营我参加主要是为了各种练手,毕竟初三几乎半年多没有打过程序啦……这里先放一些简要的分析。
【例1.1】
这道题目可以无脑做,比如用直接埃氏筛法筛出足够质数,然后再枚举一个H-质数(先设为i),然后再枚举
另外打表也是可以的。
【例1.2】
和上面那个用到的结论一致,利用质数密度分布规律,可以发现暴力枚举就好(nlnn∼π(n))。
【例1.3】
原题解法真的暴力……我认为不如我们来构造一棵线段树,然后用gcd(L,R),利用欧几里得函数的加法性质构造一棵线段树。关键是这棵线段树可以直接构造!非常好写!另外这题似乎还可以由此扩展成区间修改:只需要打完标记返回的时候顺带再gcd下就行啦~
【例1.4】
这题很简单,我们考虑用集合维恩图的观点来看。
首先我们把两个数设为P,
【例2.1】
题目即求mt+x≡nt+y(modL)的解,方程即(m−n)t≡y−x(modL),,求个逆元就好。
【例2.2】
裸题,略
【例3.1】
某省选题,显然如果对于某个能看到的坐标(x,y),必有(x,y)=1,那么我们可以枚举一维(例如纵坐标),然后另一维坐标要求和它互质的个数。然后我们立刻发现这就是∑i=1nφ(i)。可以用各种线性筛,当然也可以用大杀器杜教筛实现O(n23)左右的复杂度,可以解决更大规模的问题。
【例4.1】
构造题……还没怎么看
【例4.2】
虽然AB很大,这里绝不可能直接计算,但是稍微分析一下却发现明显的规律。
我们考虑分解A=pa11pa22…pann,然后AB=A×A×…A=pa1B1pa2B2…panBn,那么就比较明显了。我们考虑用像母函数的一个方法,考虑某一个因数,相当于在共n个盒子里各自拿了若干个质数的幂次,然后根据乘法原理直接得到:
为了方便理解,可以把各个式子乘起来展开,然后发现刚好凑出了相应的因数,同时又由于加法加到了一块!
于是这道题基本上就结完了。剩下来的问题,我们直接用等比数列和的公式算就好啦……(虽然说要取逆元,但是逆元数量也不多啊,因此差不多是O(A−−√)的规模)
【例4.3】
我一看到这道题目,我发现很明显我做过这题……
考虑取其中的两个xi和xj,我们先求出什么k不满足条件,对称地就能做出什么最小的
如果xi≡xj(modk),则这相当于k是
【例4.4】
很有趣的题目,但是还是太简单啦……[捂脸]
【例4.6】
这道题目的解法主要是设个函数然后直接把问题缩小了分析。先考虑函数f(k),令其为gcd(x,y)=k的数对个数,那么总的答案就是∑i=1nk×f(k)。
先考虑gcd(x,y)为k倍数的方案数(这种求法似乎类似于反演),那么没话说,如果最大公约数是
注意倒着搞,不难看出复杂度O(nlogn)
【例4.7】
直接枚举斜率向量,然后用欧几里得函数容易计算出该向量上的点数,例如设这个向量为(x,y),由性质不难看出(x(x,y),y(x,y))=1,即x和