Advertisement
Misbah_Uddin_Tareq

Seive and NOD with prime factrization

Sep 22nd, 2020
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.78 KB | None | 0 0
  1. // Start Time:
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4. #define  ll                     long long
  5. #define  pb                     push_back
  6. #define  pii                    pair<int,int>
  7. #define  pll                    pair<ll,ll>
  8. #define  ff                     first
  9. #define  ss                     second
  10. #define  MX                     1000000
  11. #define  endl                   "\n"
  12. #define  mod                    1000000007
  13. #define  pi                     acos(-1.0)
  14. #define  PQ                     priority_queue
  15. #define  mem(a,b)               memset(a, b, sizeof(a))
  16. #define  bug(a)                 cout<<#a<<":"<<a<<endl
  17. #define  all(x)                 (x).begin(),(x).end()
  18. #define  allr(x)                (x).rbegin(),(x).rend()
  19. #define  double_print(x,a)      cout<<fixed<<setprecision(x)<<a<<endl
  20.  
  21. vector<ll>prime;
  22. ll mark[MX+5];
  23.  
  24. void sieve()
  25. {
  26.     ll n = MX;
  27.     prime.pb(2);
  28.     for(ll i=4; i<=n; i+=2)
  29.         mark[i]=1;
  30.     for(ll i=3; i<=n; i+=2)
  31.     {
  32.         if(!mark[i])
  33.         {
  34.             prime.pb(i);
  35.             for(ll j=i*i; j<=n; j+=i*2)
  36.                     mark[j]=1;
  37.         }
  38.     }
  39. }
  40.  
  41. ll NOD(ll n)
  42. {
  43.     ll nod=1;
  44.     for(ll i=0; i<prime.size() && prime[i]*prime[i]<=n; i++)
  45.     {
  46.         ll x=0;
  47.         while(n%prime[i]==0)
  48.         {
  49.             n/=prime[i];
  50.             x++;
  51.         }
  52.         nod*=(x+1);
  53.     }
  54.  
  55.     if(n>1)
  56.         nod*=2;
  57.     return nod;
  58. }
  59.  
  60. int main()
  61. {
  62.     ios::sync_with_stdio(0); //cin.tie(0);
  63.  
  64.     sieve();
  65.     ll t;
  66.     cin>>t;
  67.     for(int tc=1; tc<=t; tc++)
  68.     {
  69.         ll n;
  70.         cin>>n;
  71.  
  72.         ll ans=NOD(n)-1; // minus 1,becouse problem wants base 2 to infinity.but NOD have divisor 1
  73.  
  74.         cout<<"Case "<<tc<<": "<<ans<<endl;
  75.  
  76.     }
  77.  
  78.     return 0;
  79. }
  80.  
  81. // Lightoj 1028
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement