Advertisement
Riz1Ahmed

Modular GCD

Aug 13th, 2018
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.63 KB | None | 0 0
  1. #include <iostream>
  2. #define ll long long
  3. ll M,mod=1e9+7;
  4. ///Modular Exponentiation.
  5. /// Return (x^y)%m. where 0<x,y,M<1e9;
  6. ll powxy(ll x, ll y) {
  7.     if (!y) return 1;
  8.     if (y&1) return (x*powxy(x, y-1))%M;
  9.     ll t = powxy(x, y/2);
  10.     return (t*t)%M;
  11. } ///D&C Alcorithm
  12. ll gcd(ll a,ll b){
  13.     return (a%b ? gcd(b, a%b) : b);
  14. }
  15. int main() {
  16.     int t;
  17.     scanf("%d",&t);
  18.     while (t--){
  19.         ll a,b,n,ans;
  20.         scanf("%lld %lld %lld",&a,&b,&n);
  21.         ll ab=abs(a-b);
  22.         if (a==b){
  23.             M=mod;
  24.             ans=(powxy(a,n)+powxy(b,n))%M;
  25.             printf("%lld\n",ans);
  26.         }else{
  27.             M=ab;
  28.             ans=(powxy(a,n)+powxy(b,n))%M;
  29.             ans=(gcd(ans,ab))%mod;
  30.             printf("%lld\n",ans);
  31.         }
  32.     }
  33.     return 0;
  34. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement