Kaidul

uva - 10780

Dec 29th, 2012
271
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.26 KB | None | 0 0
  1. #include <algorithm>
  2. #include <bitset>
  3. #include <cctype>
  4. #include <cmath>
  5. #include <cstdio>
  6. #include <fstream>
  7. #include <iostream>
  8. #include <map>
  9. #include <vector>
  10.  
  11.  
  12. using namespace std;
  13.  
  14. #define REP(i,n) for(__typeof(n) i=0; i<(n); i++)
  15. #define FOR(i,a,b) for(__typeof(b) i=(a); i<=(b); i++)
  16. typedef long long int64;
  17. typedef unsigned long long ui64;
  18. #define READ(f) freopen(f, "r", stdin)
  19. #define INF (1<<30)
  20. #define pb push_back
  21.  
  22.  
  23. #define Max 5000
  24. int status[(Max/32)+1];
  25. vector <int> primeList;
  26. vector <pair<int,int> > primeFact;
  27.  
  28. bool Check(int N,int pos){
  29.     return (bool)(N & (1<<pos));
  30. }
  31. int Set(int N,int pos){
  32.     return N=N | (1<<pos);
  33. }
  34.  
  35. void Rsieve() {
  36.     int sqrtn = int(sqrt(Max));
  37.     for(int i = 3; i <= sqrtn; i += 2) {
  38.         if(!Check(status[i>>5], i&31) ) {
  39.             for(int k = i*i; k<= Max; k += (i<<1)) {
  40.                 status[k>>5] = Set(status[k>>5], k&31);
  41.             }
  42.         }
  43.     }
  44.  
  45.     primeList.pb(2);
  46.     for(int i = 3; i <= Max; i+= 2) {
  47.         if(!Check(status[i>>5], i&31) ) {
  48.             primeList.pb(i);
  49.         }
  50.     }
  51. }
  52.  
  53. void Factorize(int m) {
  54.     primeFact.clear();
  55.     REP(i, primeList.size()) {
  56.         int prime = primeList[i];
  57.         int sqtm = int( sqrt(m) );
  58.         if(prime > sqtm) break;
  59.         int count = 0;
  60.         while(!(m % prime)) {
  61.             count++;
  62.             m /= prime;
  63.         }
  64.         if(count) primeFact.pb(make_pair(prime, count));
  65.     }
  66.     if(m > 1) primeFact.pb(make_pair(m, 1));
  67. }
  68.  
  69. int get_power(int p, int n)
  70. {
  71.     int res = 0;
  72.     for (int power = p ; power <= n ; power *= p) res += n/power;
  73.     return res;
  74. }
  75.  
  76.  
  77. int main()
  78. {
  79.     //READ("input.txt");
  80.     Rsieve();
  81.     int t, caseNo = 0, m, n, min = INF, diff;
  82.     cin>>t;
  83.     while(t--)
  84.     {
  85.         cin>>m>>n;
  86.         caseNo++;
  87.         cout<<"Case "<<caseNo<<":\n";
  88.         if(n < 1) {
  89.             cout<<"Impossible to divide\n";
  90.             continue;
  91.         }
  92.         Factorize(m);
  93.         REP(i, primeFact.size()) {
  94.             pair<int, int> p = primeFact[i];
  95.             diff = get_power(p.first, n) / p.second;
  96.             if(min < diff) min = diff;
  97.         }
  98.         if(diff) cout<<diff<<"\n";
  99.         else cout<<"Impossible to divide\n";
  100.     }
  101.     return 0;
  102. }
Advertisement
Add Comment
Please, Sign In to add comment