浴谷夏令营第一期 d2上午例题分析

好的,这一次这个浴谷的夏令营我参加主要是为了各种练手,毕竟初三几乎半年多没有打过程序啦……这里先放一些简要的分析。
【例1.1】
这道题目可以无脑做,比如用直接埃氏筛法筛出足够质数,然后再枚举一个H-质数(先设为i),然后再枚举na,反正数据范围太小。由于是质数,所以规模平均下来甚至是logn级别的……
另外打表也是可以的。
【例1.2】
和上面那个用到的结论一致,利用质数密度分布规律,可以发现暴力枚举就好(nlnnπ(n))。
【例1.3】
原题解法真的暴力……我认为不如我们来构造一棵线段树,然后用gcd(L,R),利用欧几里得函数的加法性质构造一棵线段树。关键是这棵线段树可以直接构造!非常好写!另外这题似乎还可以由此扩展成区间修改:只需要打完标记返回的时候顺带再gcd下就行啦~
【例1.4】
这题很简单,我们考虑用集合维恩图的观点来看。
首先我们把两个数设为PQ,然后显然P×Q=X×Y。接着,我们可以发现,将P,Q分解成若干质数乘积后,将这些质数放进维恩图画出来,做成两个集合(这里我不画了),那么X=PQY=PQ,在Y作为全域时,对应X的这部分是定死了的,那么我们考虑剩下的部分,即YX,将其分解为相应的质因数,得答案为2|Y||X|
【例2.1】
题目即求mt+xnt+y(modL)的解,方程即(mn)tyx(modL),,求个逆元就好。
【例2.2】
裸题,略
【例3.1】
某省选题,显然如果对于某个能看到的坐标(x,y),必有(x,y)=1,那么我们可以枚举一维(例如纵坐标),然后另一维坐标要求和它互质的个数。然后我们立刻发现这就是i=1nφ(i)。可以用各种线性筛,当然也可以用大杀器杜教筛实现O(n23)左右的复杂度,可以解决更大规模的问题。
【例4.1】
构造题……还没怎么看
【例4.2】
虽然AB很大,这里绝不可能直接计算,但是稍微分析一下却发现明显的规律。
我们考虑分解A=pa11pa22pann,然后AB=A×A×A=pa1B1pa2B2panBn,那么就比较明显了。我们考虑用像母函数的一个方法,考虑某一个因数,相当于在共n个盒子里各自拿了若干个质数的幂次,然后根据乘法原理直接得到:

Ans=(1+p1+p21++pa1B1)(1+p2+p22++pa2B2)(1+pn+p2n++panBn)

为了方便理解,可以把各个式子乘起来展开,然后发现刚好凑出了相应的因数,同时又由于加法加到了一块!
于是这道题基本上就结完了。剩下来的问题,我们直接用等比数列和的公式算就好啦……(虽然说要取逆元,但是逆元数量也不多啊,因此差不多是O(A)的规模)
【例4.3】
我一看到这道题目,我发现很明显我做过这题……
考虑取其中的两个xixj,我们先求出什么k不满足条件,对称地就能做出什么最小的k满足。
如果xixj(modk),则这相当于kxixj因数。然后由于km的时候肯定满足,而m又不太大,所以我们马上可以做掉这道题目,只要用O(n2)差分之后丢到一个表里面,接着倒着枚举每个数是不是因数就好(倒着是为了避免重复计算)。
【例4.4】
很有趣的题目,但是还是太简单啦……[捂脸]
【例4.6】
这道题目的解法主要是设个函数然后直接把问题缩小了分析。先考虑函数f(k),令其为gcd(x,y)=k的数对个数,那么总的答案就是i=1nk×f(k)
先考虑gcd(x,y)k倍数的方案数(这种求法似乎类似于反演),那么没话说,如果最大公约数是k的倍数的话,显然这两个数也必然要是k的倍数。这时,由乘法原理,这个方案数为[n/k]2。然后再减掉f(2k)f(3k),就好啦!
注意倒着搞,不难看出复杂度O(nlogn)
【例4.7】
直接枚举斜率向量,然后用欧几里得函数容易计算出该向量上的点数,例如设这个向量为(x,y),由性质不难看出(x(x,y),y(x,y))=1,即xy相应除去最大公约数后互质,此时这个向量(x(x,y),y(x,y))正好和原点间连线没有任何别的点,考虑逆操作与对称性,马上发现这个向量上点的数目为(x,y)+1,其中包括两个端点。这就是三点共线的情况,任取三点的情况用组合数直接算,减去就好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值