Saleh127

CSES 2182 / Number Theory - Product of Divisor, SD ,ND

Apr 11th, 2022 (edited)
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.69 KB | None | 0 0
  1. /***
  2.  created: 2022-04-10-23.21.24
  3. ***/
  4.  
  5. #include <bits/stdc++.h>
  6. using namespace std;
  7. #define ll long long
  8. #define test int tt; cin>>tt; for(int cs=1;cs<=tt;cs++)
  9. #define get_lost_idiot return 0
  10. #define nl '\n'
  11. #define maX 10000008
  12. ll mod=1e9+7;
  13.  
  14. ll bigmod(ll a,ll c,ll d)
  15. {
  16.     if(c==0) return 1LL;
  17.     ll x=bigmod(a,c/2,d);
  18.     x=(x*x)%d;
  19.     if(c%2==1LL)
  20.     {
  21.         x=(x*a)%d;
  22.     }
  23.     return x;
  24. }
  25.  
  26. int main()
  27. {
  28.     ios_base::sync_with_stdio(0);
  29.     cin.tie(0);
  30.     cout.tie(0);
  31.  
  32.     ll n,m,i,j,k,l=1,nd=1,sd=1,pd=1;
  33.  
  34.     cin>>n;
  35.  
  36.     ll a[n+2],b[n+2];
  37.  
  38.     for(i=0;i<n;i++)
  39.     {
  40.         cin>>a[i];
  41.         cin>>b[i];
  42.     }
  43.  
  44.     for(i=0;i<n;i++)
  45.     {
  46.         l*=bigmod(a[i],b[i],mod);
  47.  
  48.         nd=(nd * (b[i]+1))%mod;
  49.  
  50.         sd= sd * (bigmod(a[i],b[i]+1,mod)-1)%mod * bigmod(a[i]-1,mod-2,mod);
  51.  
  52.         sd%=mod;
  53.  
  54.     }
  55.  
  56.     ll f=-1;
  57.  
  58.  
  59.     for(i=0;i<n;i++)
  60.     {
  61.         if(b[i]%2==1)
  62.         {
  63.             f=i;
  64.         }
  65.     }
  66.  
  67.  
  68.     if(f!=-1)
  69.     {
  70.         ll gama=1;
  71.  
  72.         for(i=0;i<n;i++)
  73.         {
  74.             if(i==f)
  75.             {
  76.                 gama=(gama*(b[i]+1)/2)%(mod-1);
  77.             }
  78.             else
  79.             {
  80.                 gama=(gama*(b[i]+1))%(mod-1);
  81.             }
  82.         }
  83.  
  84.         for(i=0;i<n;i++)
  85.         {
  86.             pd=(pd*bigmod(a[i],(b[i]*gama)%(mod-1),mod))%mod;
  87.         }
  88.     }
  89.     else
  90.     {
  91.         ll gama=1;
  92.  
  93.         for(i=0;i<n;i++)
  94.         {
  95.             gama=(gama*(b[i]+1))%(mod-1);
  96.         }
  97.  
  98.         for(i=0;i<n;i++)
  99.         {
  100.             pd=(pd*bigmod(a[i],((b[i]/2)*gama)%(mod-1),mod))%mod;
  101.         }
  102.     }
  103.  
  104.     cout<<nd<<" "<<sd<<" "<<pd<<nl;
  105.  
  106.     get_lost_idiot;
  107. }
  108.  
Add Comment
Please, Sign In to add comment