Advertisement
shamiul93

LightOJ 1035 - Intelligent Factorial Factorization

Feb 25th, 2017
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.59 KB | None | 0 0
  1. /**
  2. @author - Rumman BUET CSE'15
  3. Problem - 1035 - Intelligent Factorial Factorization
  4.  
  5. Link - http://www.lightoj.com/volume_showproblem.php?problem=1035
  6.  
  7. Concept-
  8.  
  9.     No concept. :p
  10.     Easy one. Sieve , array 2D , optimize...etc.
  11.  
  12. */
  13.  
  14.  
  15. #include<bits/stdc++.h>
  16. using namespace std ;
  17. #define ll long long
  18. #define fo freopen("out.txt","w",stdout)
  19. #define fi freopen("in.txt","r",stdin)
  20. #define isprime false
  21.  
  22. int a[110][110] ;
  23. bool prime[110] = {} ;
  24. vector<int> v ;
  25.  
  26. /// False == is a prime
  27. void sieve()
  28. {
  29.     prime[0] = !isprime ;
  30.     prime[1] = !isprime ;
  31.  
  32.     for(ll i = 4 ; i< 110 ; i+=2)
  33.     {
  34.         prime[i] = !isprime ;
  35.     }
  36.     for(ll i = 3 ; i< 110 ; i+=2)
  37.     {
  38.         if(prime[i]==isprime)
  39.         {
  40.             for(ll j = 2*i ; j< 110 ; j+=i)
  41.             {
  42.                 prime[j] = !isprime ;
  43.             }
  44.         }
  45.     }
  46.  
  47.     for(ll i = 0 ; i < 110 ; i++)
  48.     {
  49.         if(prime[i] == isprime)
  50.         {
  51.             v.push_back(i) ;
  52.         }
  53.     }
  54. }
  55.  
  56.  
  57. void result()
  58. {
  59.     for(ll i = 2 ; i<= 100 ; i++)
  60.     {
  61.         ll an ;
  62.         an = i ;
  63.  
  64.         for(ll j = 0 ; j < v.size() ; j++)
  65.         {
  66.             ll c = 0 ;
  67.  
  68.             while(an % v[j] == 0 && an > 0)
  69.             {
  70.                 c++;
  71.                 an = an / v[j] ;
  72.             }
  73.             ll d ;
  74.             d = v[j] ;
  75.             a[i][d] = c ;
  76.  
  77.             if(an==0 || v[j] > an)
  78.             {
  79.                 break ;
  80.             }
  81.         }
  82.     }
  83. //    cout << "ni" ;
  84.  
  85. }
  86.  
  87. int main()
  88. {
  89. //    fi ;
  90. //    fo ;
  91.     ll arr[110] = {} ;
  92.     sieve();
  93.     result();
  94.  
  95.     ll T, t =  0 ;
  96.  
  97.     scanf("%lld",&T);
  98.  
  99.     while(T--)
  100.     {
  101.         t++ ;
  102.         ll n;
  103.         scanf("%lld",&n);
  104.  
  105.         for(ll i = 2 ; i<= n ; i++)
  106.         {
  107.             ll last = 2 ;
  108.             for(ll j = 2 ; j <= 100 ; j++)
  109.             {
  110.                 if(prime[j]== isprime)
  111.                 {
  112.                     arr[j] += a[i][j] ;
  113.                 }
  114.             }
  115.         }
  116.  
  117.         printf("Case %lld: %lld = ",t, n) ;
  118.  
  119.         ll k = 0 ;
  120.  
  121.         for(ll i = 2 ; i <= 100 ; i++)
  122.         {
  123.             if(arr[i] >= 1)
  124.             {
  125.                 if(k==1)
  126.                 {
  127.                     printf(" * %lld (%lld)", i, arr[i]) ;
  128.                 }
  129.                 else
  130.                 {
  131.                     printf("%lld (%lld)", i, arr[i]) ;
  132.                     k = 1 ;
  133.                 }
  134.             }
  135.         }
  136.         printf("\n");
  137.  
  138.         for(ll i = 0 ; i< 110 ; i++)
  139.         {
  140.             arr[i] = 0 ;
  141.         }
  142.  
  143.     }
  144.  
  145.     return 0 ;
  146. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement