Advertisement
Saleh127

CodeChef QNUMBER / Number theory

Apr 7th, 2022
963
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.12 KB | None | 0 0
  1. /***
  2.  created: 2022-04-07-16.30.03
  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.  
  12.  
  13. map<ll,ll>dv;
  14.  
  15. ll td;
  16.  
  17. void fctr(ll n)
  18. {
  19.  
  20.     td=1;
  21.     for(ll i=2;i*i<=n;i++)
  22.     {
  23.         if(n%i==0)
  24.         {
  25.             ll c=0;
  26.             while(n%i==0)
  27.             {
  28.                 n/=i;
  29.                 c++;
  30.             }
  31.             dv[i]=c;
  32.             td*=(c+1);
  33.         }
  34.     }
  35.     if(n>1)
  36.     {
  37.         dv[n]=1;
  38.         td*=2;
  39.     }
  40. }
  41.  
  42.  
  43. int main()
  44. {
  45.     ios_base::sync_with_stdio(0);
  46.     cin.tie(0);
  47.     cout.tie(0);
  48.  
  49.     ll n,m,i,j,k,l,q;
  50.  
  51.     cin>>n>>q;
  52.  
  53.  
  54.     fctr(n);
  55.  
  56.  
  57.     while(q--)
  58.     {
  59.         cin>>j>>k;
  60.  
  61.         if(j==1)
  62.         {
  63.             l=1;
  64.             for(auto d:dv)
  65.             {
  66.                 ll c=0;
  67.                 while(k%d.first==0)
  68.                 {
  69.                     c++;
  70.                     k/=d.first;
  71.                 }
  72.                 l*=min(c,d.second)+1;
  73.             }
  74.  
  75.             cout<<l<<nl;
  76.         }
  77.         else if(j==2)
  78.         {
  79.             l=1;
  80.             for(auto d:dv)
  81.             {
  82.                 ll c=0;
  83.                 while(k%d.first==0)
  84.                 {
  85.                     c++;
  86.                     k/=d.first;
  87.                 }
  88.  
  89.                 if(c>d.second)
  90.                 {
  91.                     l=0;
  92.                     break;
  93.                 }
  94.  
  95.                 l*=(d.second-c+1);
  96.             }
  97.             if(k>1) l=0;
  98.  
  99.             cout<<l<<nl;
  100.         }
  101.         else
  102.         {
  103.             l=1;
  104.             for(auto d:dv)
  105.             {
  106.                 ll c=0;
  107.                 while(k%d.first==0)
  108.                 {
  109.                     c++;
  110.                     k/=d.first;
  111.                 }
  112.  
  113.                 if(c>d.second)
  114.                 {
  115.                     l=0;
  116.                     break;
  117.                 }
  118.  
  119.                 l*=(d.second-c+1);
  120.             }
  121.             if(k>1) l=0;
  122.  
  123.             cout<<td-l<<nl;
  124.         }
  125.     }
  126.  
  127.  
  128.     get_lost_idiot;
  129. }
  130.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement