Advertisement
saske_7

number of divisor.cpp

Dec 22nd, 2017
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.73 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std ;
  3.  
  4. #define M 1005
  5. #define pii pair<int , int >
  6. #define mp make_pair
  7. #define pf printf
  8. #define sf scanf
  9. #define sf1(a ) scanf("%d",&a)
  10. #define pb push_back
  11. #define mem(x, y) memset(x , y , sizeof x )
  12. #define sf2(a, b) scanf("%d%d",&a ,&b)
  13. #define rep(i,n) for(i = 0 ; i< n ;i++ )
  14. #define repi(i,n) for(i = 1 ; i<= n ; i++ )
  15.  
  16. int p_arr[M ] , arr[M] ;
  17.  
  18. struct _si{
  19. int var , num ;
  20. _si();
  21. _si(int a , int b )
  22. {
  23. var = a ;
  24. num = b ;
  25. }
  26.  
  27. };
  28.  
  29. vector<_si > si ;
  30. vector<int > divv ;
  31.  
  32. void seive(){
  33. int i ,j , k ;
  34. //mem(p_arr , 1 );
  35. rep(i , M ) p_arr[i] = 1 ;
  36. p_arr[0] = p_arr[1] = 0 ;
  37. for(i = 2 ; i < M ; i++ )
  38. if(p_arr[i])
  39. for(j = i+i ; j< M ; j+= i )
  40. p_arr[j] = 0 ;
  41.  
  42. }
  43.  
  44. void nod(int k ){
  45. int i ,j ,m ;
  46. j = k ;
  47. m = k/2 ;
  48. if(p_arr[k] ){
  49. si.push_back(_si( k , 2 ));
  50. return ;
  51.  
  52. }
  53.  
  54. for(i =2 ;i <= m ;i++ ){
  55. if(k % i == 0){
  56. divv.pb( i);
  57. arr[i]++ ;
  58. k/= i ;
  59. while(1 ){
  60. // printf("k - %d %d\n", k , i);
  61. if( k% i == 0){
  62. k /= i ;
  63. arr[i]++;
  64. }
  65. else
  66. break ;
  67. }
  68. }
  69. }
  70. int mul = 1 ;
  71. rep(i , divv.size() ){
  72. k = arr[divv[i] ] +1 ;
  73. mul*= k ;
  74. }
  75.  
  76. si.push_back(_si(j , mul ));
  77. }
  78.  
  79. bool comp(_si a , _si b ){
  80. if(a.num != b.num) return a.num < b.num ;
  81. else return a.var > b.var;
  82.  
  83. }
  84.  
  85. void build(){
  86.  
  87. int i , j ,k , tc , cs = 0 ;
  88.  
  89. repi(i , 1000 ){
  90. rep(j ,1001 ){ arr[j] = 0 ; divv.clear(); }
  91. nod(i );
  92.  
  93. }
  94. sort(si.begin() , si.end() , comp);
  95.  
  96. //cout << "done \n";
  97.  
  98. sf1(tc );
  99. while(tc--){
  100.  
  101. sf1(k);
  102.  
  103. printf("Case %d: %d\n" , ++cs , si[k-1].var);
  104. }
  105. }
  106.  
  107. int main(){
  108. int i ,j , k ;
  109. seive();
  110.  
  111. build();
  112.  
  113.  
  114. return 0 ;
  115.  
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement