数论
seez
njfu
展开
-
牛客寒假训练营 4 G(枚举优化,欧拉降幂)
由于是子序列问题,可以发现对于每个元素有两种选择,选或者不选所以一共可能有2^n种子序列,如果枚举所有的区间,并找出他们的最大值最小值,时间复杂度是O(n*2^n)因为每个区间只有最大值和最小值被使用到,所以我们只需要枚举最大值最小值就可以了,同时我们发现由于是子序列,不需要在意他的位置,因为作为最值位置可以任意,所以可以进行排序那么对于每一个点来说,有作为最大值的所有情况和作为最小值的所有情况,因为是乘积,就可以单枚举出他作为最大值的次数 p,得到和作为最小值的次数q,得到,而不用在意与他..原创 2022-02-14 16:25:39 · 173 阅读 · 0 评论 -
牛客寒假训练营 4 J (最小公倍数,数论)
原题链接因为有3e4个数据,如果用欧几里得算法求所有合数的最小公倍数会爆longlong由于任意数都是最小质因数的指数的乘积。所以最小公倍数其实是[l,r]这个范围内的所有合数构成的每个质因数的最大指数的乘积。也就是说[l,r]范围内所有质因数的最高次幂的乘积因为,我们可以得出,最大公因数就是所有合数共同的最小次幂的乘积代码如下#include <iostream>#include <algorithm>using namespace std;...原创 2022-02-12 22:37:29 · 260 阅读 · 0 评论 -
200. Hankson的趣味题 (约数角度求公因数)
1原创 2022-02-12 10:58:43 · 214 阅读 · 0 评论 -
220. 最大公约数 (欧拉函数)
220. 最大公约数 - AcWing题库gcd(x,y)=p, p表示一个素数,等价于gcd(x/p,y/p)=1,表示x/p和y/p互质要求gcd(x,y)为素数有多少对,等价于求gcd(x/p,y/p)=1有多少对这样子其实就变成了201. 可见的点 - AcWing题库的模型,只需要做一遍欧拉函数,求出对应的phi数组就可以了。由于我们不知道素数p是多少,需要枚举一下p,然后求对应有几对那么可以用前缀和优化,s[i]表示1~i中,欧拉函数值之和,然后+上2*s[i] (...原创 2022-02-12 00:55:28 · 456 阅读 · 0 评论 -
201.可见的点(欧拉函数)
201. 可见的点 - AcWing题库我们发现,任意两个 x,y <=N 内,每个斜率都只有一个点是可见的我们可以发现,一个斜率 y/x 最先被发现的点(x,y),他的x,y是互质的那么,以斜率为1的点作为分界线,坐标(x,i) (1<=i<=x),所有第一个被看见的点的i都是和x互质的,等价于求1~x有多少个数与x互质,那么就变成了欧拉函数的定义,筛法求一遍欧拉函数就可以了由于 上半部分 和下半部分完全对称,那么就不需要做了,只需要*2就可以了#incl...原创 2022-02-12 00:43:27 · 7132 阅读 · 0 评论 -
198. 反素数 (约数个数)
198. 反素数 - AcWing题库反素数:对于g(x),1~x-1的所有数i,他们的g(i)<g(x),那么x是反素数目标:寻找约数个数最多的,且不超过N的最大的反素数分析:由于反素数的定义是,比x小的数约数个数都要比他小,不能相同,我们可能很显然的想到,是要求一个不超过N的,约数个数最大的且值最小的数由于这种性质,我们每次选用最小质因子的时候都会优先选择比较小的质数,那么根据质数的前缀乘积,我们只要列到23就可以了。同时,由于要约数个数最大,那么约数的个数就等于 (2的...原创 2022-02-11 23:56:55 · 6956 阅读 · 0 评论 -
1294. 樱花(求约数)
原题链接 - AcWing分析: 思考怎么进行优化,就是找出一个特殊的性质,由于看到了n!,可以想到197. 阶乘分解 - AcWing题库这道题,并且看到了数对数量,可能是和约数的个数是有关的限制条件:x,y必须是正整数 满足 1/x + 1/y =1/n!那么可以通过这两个限制条件来转化一下模型,过程如下那么我们需要计算(2*n...原创 2022-02-11 22:35:35 · 199 阅读 · 0 评论 -
1291.轻拍牛头 (计算约数)
轻拍牛头 - AcWinge约数-->倍数,两者可以相互转换分析:直接判定两个数是否一个是另外一个的约数的话,时间复杂度是O(n^2)这样之间判定的时间复杂度太高了,可以从数组中一个数的角度出发,染色他所有的约数,由于染色约数这个操作不是很好操作,因为c++是向下取整的,我们一般转化为倍数逆向思维一下,一个数是数组中其他数的约数的话,那其他数就是这个数的倍数,所以我们可以去一个数中所有的倍数for(int i=1;i<=n;i++) { int...原创 2022-02-11 20:32:13 · 7153 阅读 · 0 评论 -
197.阶乘分解(分解质因数)
分析:如果直接采取普通的分解质因数的方法,那么由于有n个数相乘,普通分解质因数的时间复杂度是O(sqrt(n)),总的时间复杂度是O(Nsqrt(n)) 会超时思考有没有其他办法可以筛选质因数呢?逆向思维一下,可以从质因数的角度出发,看看n!里面还有多少个这个数规律:我们发现,对于1~n来说,假设质因数是p1~n中只是p的倍数,拥有1个p 1~n中是p^2的倍数,拥有2个p ...那么,从质因数的角度出发,我们只需要找出1~n中有多少个p的倍数就可以了,可想而知是[n/p](下..原创 2022-02-10 10:36:35 · 752 阅读 · 0 评论 -
196. 质数距离 (筛素数,离散化)
196. 质数距离 - AcWing题库这里参考于大佬的题解:AcWing 196. 质数距离 - AcWing前言:由于L,U最大可以取到2^32-1,2^31-1是约等于2e9,如果采用普通的线性筛法的话,无论是时间复杂度还是空间复杂度都是O(n)==O(2e9),那必然是会超时的,那么我们就思考一下怎么做出优化。分析:由于注意到 L,U 的差值只是1e6,那么采用O(n)或者O(nlogn)的做法总结一下y总的思路,如下一个合数n的两个因子,必然有一个不会超过sqrt(n),...原创 2022-02-09 16:08:42 · 988 阅读 · 0 评论 -
1293. 夏洛克和他的npy(二分图,筛质数)
原题链接 - AcWing分析:限制条件/要求,如下要选择尽可能少的颜色 一件珠宝的价格是另一件珠宝的质因子,两件珠宝颜色不同1.通过第二个性质我们可以分析出,由于质数必然没有质因子,那么他的颜色可以任意的,我们贪心一下,就可以想到所有的质数颜色都可以是一样的。2.由于只需要保证合数与他的质因子颜色不同,那么对于两个拥有同一个质因子的合数来说,他们只需要和质因子颜色不同,那么他们的颜色可以是一样的3.如果一个合数拥有两个不同的质因子,由于两个不同的质因子的颜色贪心的想是相同的,那么...原创 2022-02-09 14:47:52 · 321 阅读 · 0 评论 -
1292. 哥德巴赫猜想(筛质数)
由于要验证任何一个大于4的偶数能否拆成两个奇素数之和,那么就筛一遍质数,然后注意不要枚举2,枚举一遍剩下所有的质数就可以了由于1e6里面的质数数量大约有8w个,如果运用n^2枚举的话,会是10^8的时间复杂度,会超时,所有我们可以只枚举一个,另外一个通过st判断就可以了,可以做到O(n)的时间复杂度,...二分就没有必要了,因为1e6的范围,一定是存储下来的#include <iostream>#include <algorithm>using namespace ..原创 2022-02-09 14:18:32 · 229 阅读 · 0 评论 -
牛客训练营 2 F 小沙的算数(并查集,逆元)
分析:由于只有正整数,不会出现负数,我们发现只需要储存’*‘的结果,然后和所有’ +‘的结果加起来,就是最后的答案了所以,’*'连起来的就是一个集合,只需要储存他们的积,我们用并查集连接起来需要改变集合的值时,找到积和当前要改变的位置的逆元,就能够做到改变积的作用#include <iostream>#include <algorithm>using namespace std;const int N = 1e6 + 10;const int mod = 1..原创 2022-02-06 17:37:00 · 223 阅读 · 0 评论 -
牛客寒假训练营 1 D 牛牛做数论(打表,筛质数)
思考:关于数据范围,由于范围是[1e9],那么质数只需要最多筛选前20个就可以了分析:首先,欧拉函数 f(n)=1~n中所有与n互质的元素的个数f(n)=n(1-1/p1)(1-1/p2)...(1-1/pk)f(n)/n=(1-1/p1)(1-1/p2)...(1-1/pk)那么,通过找规律我们发现运用欧拉函数的模板可以得出1: 1/12: 1/23: 2/34: 1/25: 4/56: 1/37: 6/78: 1/29: 2/310: 2..原创 2022-02-06 15:12:44 · 604 阅读 · 0 评论 -
数论---扩展欧几里得算法,线性同余,求逆元
裴蜀定理内容:对于任意的整数a,b,一定存在两个未知数 x,y ,使得 ax+by =d (d=(a,b))对于任意的x,y,所得到的 ax+by = d的倍数对于任意的x,y,所得到的最小正整数是d推论:如果两个x,y互质,ax+by 最小正整数 =1 ,任意的x,y可以表达所有的数扩展欧几里得算法内容:已知整数a、b,扩展欧几里得算法可以在求得a、b的最大公约数的同时,能找到整数x、y(其中一个很可能是负数),使它们满足裴蜀定理证明:#include <原创 2022-02-05 16:15:32 · 230 阅读 · 0 评论 -
数论---欧拉定理,快速幂求逆元
欧拉定理内容:如果存在任意两个正整数a,n,满足a与n互质,那么,f(n)表示的是欧拉函数:1~n中与n互质的数个数证明:证明结束快速幂求逆元同余:给定一个正整数m,如果两个整数a,b满足(a-b)能够被m整除,那么可以认为a与b对模m同余,记为a 同余 b逆元:就是一个数的倒数,a/b (mod n) == a*c (mod n),c就是b的逆元c可以看为b的倒数,如果b特别大,就要把b-1 换为 c...原创 2022-02-04 16:33:02 · 1238 阅读 · 0 评论 -
数论---欧拉函数,筛法求欧拉函数
欧拉函数欧拉函数:互质:一个数不能被另一个数整除,表示互质,1,-1能与任何数互质证明:欧拉函数表示的是1~N中与N互质的数N能够被拆分为多个质因子,,并且有相应的指数与分解质因数类似#include <iostream>#include <algorithm>using namespace std;int phi(int x){ int res=x; for(int i=2;i<=x/i;i++) if(原创 2022-02-03 13:58:35 · 1979 阅读 · 0 评论