数学公式
文章平均质量分 65
鲜果维他命
Don't be a programmer,to be a problem solver
展开
-
数论分块(整除分块) 每日一遍,算法再见!
文章目录数论分块(整除分块)证明+推导模板例题分析请关注我看更多数论分支知识体系讲解,也别忘点个赞额!数论分块(整除分块)证明+推导模板代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;int main(){ ll n; cin>>n; ll ans=0; /*初始化l为1,因为我们从1开始遍历*/ for(ll l=1,r;l<=n;l=r+1)//下一个值的l原创 2021-02-14 19:05:40 · 253 阅读 · 0 评论 -
BSGS&exBSGS(让你轻松理解和掌握)
BSGS(Baby step Giant step)简称,拔山盖世,不是个事,哈哈哈,不开玩笑了,它的名字叫大步小步算法,主要用来解决形如a^x≡b(mod p)的高次线性同余方程,其中a,p互质,求最小正整数解x的问题解题步骤如下:step1.令m=ceil( sqrt( p ) ),也就是对p开二次根号然后向上取整。step2.令x=i*m-j,1<=i<=m,0<=j<=m-1,此时原式可以表示为a^(im-j)≡b(mod p) ->a^im ≡ b×a^j(m原创 2021-02-04 14:24:51 · 726 阅读 · 0 评论 -
求逆元的方法
扩展欧几里得求逆元ax=1(mod p),a,p互质,那么原式可以写成ax+py=gcd(a,p)(mod p),a,p互质,所以gcd(a,b)=1,所以原式等于ax+py=1(mod p),直接通过扩展欧几里得算法即可轻松求得,如果不知道什么是扩展欧几里得算法,建议先学一下https://blog.csdn.net/TheWayForDream/article/details/109014990代码:#include<bits/stdc++.h>using namespace st原创 2021-01-26 22:38:08 · 178 阅读 · 0 评论 -
同余概述(同余定理)
什么是同余定理?相比大家都知道,简单来说就是一个公式如果a=b(mod m),那么我们称a,b关于模m同余,这个式子叫做同余式。定理1.若a=b(mod m),且c=d(mod m),那么ax+cy=bx+dy(mod m),同余式满足加法定理2.若a=b(mod m),且 c=d(mod m),那么,ac=bd(mod m),同余式满足乘法定理3.若a=b(mod m),那么gcd(a,m)=gcd(b,m)定理4.若a=b(mod mi),其中1<=i<=n,当且仅当a=b(mod原创 2021-01-26 22:36:31 · 7213 阅读 · 0 评论 -
2019 ICPC 银川 Function(补题)数论分块+数学
题目链接 https://nanti.jisuanke.com/t/42386推导过程(由于Latex太麻烦就直接板书)AC代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;const ll mod=998244353;ll get_inv(ll dishu,ll zhishu)//a,p-2,,p是mod { ll ans=1; while(zhishu) { if(zhishu.原创 2021-01-21 20:44:21 · 218 阅读 · 0 评论 -
素数定理+应用
素数定理用法:给你一个数x(这个数可能非常大),让你找出小于x的素数个数的位数,素数个数我们记作Π(x)素数定理:当x增大时,Π(x)/(x/lnx)无线趋近于1趁热打铁素数个数的位数小明是一个聪明的孩子,对数论有着很浓烈的兴趣。他发现求1到正整数10n 之间有多少个素数是一个很难的问题,该问题的难以决定于n 值的大小。现在的问题是,告诉你n的值,让你帮助小明计算小于10n的素数的个数值共有多少位?Input输入数据有若干组,每组数据包含1个整数n(1 < n < 100000原创 2021-01-20 15:28:29 · 587 阅读 · 0 评论 -
类欧几里得算法
类欧几里得算法为什么叫类欧几里得算法,顾名思义类似于欧几里得算法,在学习本算法之前可以先学习欧几里得算法,以便于加深对类欧几里得算法的理解作用:类欧几里得可以用来做什么呢,以及证明过程?这里推荐一篇好的视频类欧几里得算法详解视频,可以结合证明过程加深印象,这里推荐一篇好的博客,证明过程很详细类欧几里得算法证明证明需要用到的等式关系用来快速求取代码ll f_gcd(ll a,ll b,ll c,ll n){ ll m=(a*n+b)/c; if(n==0||m==0) return b原创 2020-11-06 15:44:17 · 765 阅读 · 1 评论