数论
Konjacer
一介废宅
展开
-
辗转相除法(欧几里得算法)(gcd)模板及其原理
下面给出学长教的模板:typedef long long ll;ll gcd(ll a,ll b){ return b==0?a:gcd(b,a%b);}其计算原理依赖于以下定理:定理:两个整数的最大公约数等于其中较小的那个数(也就是除数)和两数相除余数的最大公约数。最大公约数(Greatest Common Divisor)缩写为GCD。对于代码的解释:以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数。这一操作可以利用递归实现。以下是对上面定理的证明,摘自百度原创 2020-10-21 23:51:44 · 912 阅读 · 0 评论 -
快速幂模板及对其的理解
下面先贴上学长教的快速幂模板:typedef long long ll;ll qpow(ll a,ll b,ll mod){ ll ans=1; while(b>0) { if(b & 1) { ans=((ans%mod)*(a%mod))%mod; } a=((a%mod)*(a%mod))%mod; b>>=1; } return ans;}那么这个快速幂是如何实现的呢?原理就是将a^b拆分掉,拆分成若干部分,每一部分a的指数原创 2020-10-21 23:32:33 · 261 阅读 · 0 评论