扩展欧几里得和乘法逆元,欧拉函数 例题总结
1.洗牌:解 2^m*x同余l(mod (n+1))
因为m和x、n+1数据范围都比较大,所以肯定要化简2^m
不能用拓展欧几里得!a^b三a^b mod(fai(n+1)),因为2^m还乘了一个x,2^m、l不一定同余于(n+1)\
但是可以先把2^m mod(n+1)算出来(等价于2^m),最后解方程
这样是等价的(可以手摸一下)
/*
递推解决一部分:
int local,cnt
while(cnt--)
{
if(local&1)
{local=local+1 /2;
local=(total/2+local)
}
if(偶数)
{
local=local/2;
local=(total/2+local);
}
}循环吧
x*2^m 同余last mod(n+1)
求一下fai(n+1)//
然后m mod(fai(n+1))减小运算次数
a=(2^m) x =最终答案
b=(n+1) y=无所谓
k=last 算吧
*/
ll n,m,l;
ll fai(ll x)
{
ll ans=x,start=sqrt(x+1);
_f(i,2,start)
{
if(x%i==0)
{
ans=ans-ans/i;
while(x%i==0)x/=i;
}
}
if(n!=1)ans=ans-ans/n;
return ans;
}
ll x,y;
ll exgcd(ll a,ll b)
{
if(b==0