多校联训12
作者:互联网
rank 56 grade 146
T1:水题二分
T2:数论
T2:定义f(f(f(f(x)))).....是f(x)迭代n次的结果,f(x)=(x+1/x)/2.给出多组n,x,求f(x)这样迭代n-1的结果。(n<=1e18,x<=1e18)
x= \(\frac{a}{b}\) ,原式可以化为\(\frac{a^{2}+b^{2}}{2*ab}\),假设f2(x)=a2/b2,发现a2+b2=\((a+b)^{2}\),a2-b2=\((a-b)^{2}\),那么就可以得到fn(x)=an/bn,an+bn=\((a+b)^{2^{n-1}}\),an-bn=\((a-b)^{2^{n-1}}\),可以用快速幂解决。注意在计算指数的时候,是qpow(2,n-1,mod-1)模数是mod-1,因为,当gcd(a,p)=1,有\(a^{b}\equiv\) $ a^{b mod phi(p)}$(mod p),又因为p是质数,所以phi(p)=p-1,所以mod (p-1)
const ll mod=1e9+7,n2=500000004;
ll x,n;
inline ll qpow(ll a,ll b,ll md){
ll ans=1;
//b%=md;
while(b){
if(b&1){
ans=ans*a%md;
}
b>>=1;
a=a*a%md;
}
return ans;
}
int main()
{
//freopen("c.out","w",stdout);
int T=re();
while(T--){
x=re(),n=re();
ll a=x,b=1;ll aa=x,bb=1;n=qpow(2,n-1,mod-1);
a=qpow(aa+bb,n,mod);b=qpow(aa-bb,n,mod);
// chu("a:%lld b:%lld\n",a,b);
ll fz=(a+b)*n2%mod,fm=(fz-b+mod)%mod;
//chu("fz:%lld fm:%lld\n",fz,fm);
chu("%lld\n",fz*qpow(fm,mod-2,mod)%mod);
}
return 0;
}
标签:qpow,12,ll,多校,联训,ans,lld,fz,mod 来源: https://www.cnblogs.com/403caorong/p/16583390.html