比赛 EYOI与SBOI开学欢乐赛12th 评测结果 AAAAAAAAAA
题目名称 最大公因数取模 最终得分 100
用户昵称 qyd 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2022-10-17 22:06:20
显示代码纯文本
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cmath>
  4. using namespace std;
  5. #define ll long long
  6. const int mod=1e9+7;
  7. ll qm(ll a,ll n,ll m); //取模m的a^n
  8. ll gcd(ll m,ll n); //gcd(m,n)
  9. int main()
  10. {
  11. freopen("gcmod.in","r",stdin);
  12. freopen("gcmod.out","w",stdout);
  13. int T;
  14. cin>>T;
  15. ll A,B,N,d;
  16. while(T>0&&scanf("%lld%lld%lld",&A,&B,&N))
  17. {
  18. T--;
  19.  
  20. d=abs(A-B);
  21. if(d==0)
  22. cout<<(qm(A,N,mod)+qm(B,N,mod))%mod;
  23. else
  24. {
  25. A%=d;
  26. B%=d;
  27. cout<<gcd(((qm(A,N,d))+qm(B,N,d)),d)%mod;
  28. }
  29. }
  30. return 0;
  31. }
  32. ll qm(ll a,ll n,ll m)
  33. {
  34. if(n==1)
  35. return a;
  36. else
  37. {
  38. a%=m;
  39. ll base=qm(a,n/2,m)%m;
  40. ll temp=(base*base)%m;
  41. return ((n%2==0?1:a)*temp)%m;
  42. }
  43. }
  44. ll gcd(ll m,ll n)
  45. {
  46. return n==0?m:gcd(n,m%n);
  47. }