传送门

一开始还手动拓欧找规律,发现好像玩不了。

然后想了想,A-B这个数比较小,枚举它的因子判断合不合法就行了。

需要特判A=B的情况。

#include<cstdio>
#include<algorithm>
#define ll long long
#define ld long double
using namespace std;

ll a,b,n,c,t,d,A,B;
int i;
const int MOD=1e9+7;
inline void MM(ll &a,ll M){while(a>=M)a-=M;}
inline ll cc(ll x,ll y,ll M){
    x=x*y-(ll)(((ld)x*y+0.01)/M)*M;
    return x<0?x+M:x;
}
inline ll mi(ll x,ll y,ll M){
    ll ans=1;
    x%=M;
    while(y){
        if (y&1) ans=cc(ans,x,M);
        y>>=1;x=cc(x,x,M);
    }
    return ans;
}
inline bool ju(ll x){
    return (mi(a,n,x)+mi(b,n,x))%x==0;
}
inline void work(){
    scanf("%lld%lld%lld",&a,&b,&n);
    c=a-b;
    if (c==0){
        printf("%d\n",(mi(a,n,MOD)+mi(b,n,MOD))%MOD);
        return;
    }
    for (i=1;1LL*i*i<=c;i++)
    if (c%i==0&&ju(c/i)){
        printf("%lld\n",c/i%MOD);
        return;
    }
    for (i--;i;i--)
    if (c%i==0&&ju(i)){
        printf("%lld\n",i%MOD);
        return;
    }
}
int main(){
    scanf("%lld",&t);
    while(t--) work();
}
View Code

相关文章:

  • 2022-12-23
  • 2021-10-12
  • 2021-07-07
  • 2022-12-23
  • 2021-12-24
  • 2021-12-27
  • 2021-10-15
  • 2021-06-24
猜你喜欢
  • 2021-09-19
  • 2021-08-19
  • 2022-01-20
  • 2021-05-21
  • 2022-01-09
  • 2021-12-24
  • 2021-05-25
相关资源
相似解决方案