Advertisement
a53

masterpiece001

a53
Feb 4th, 2018
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.63 KB | None | 0 0
  1. #include <fstream>
  2. using namespace std;
  3.  
  4. int NrDiv(int x) /// Calculez numarul nrd de divizori ai lui x
  5. {
  6. int nrd=1,k=x,p=0;
  7. while(!(k&1))
  8. ++p,k>>=1;
  9. nrd*=p+1;
  10. for(int d=3;d*d<=k;d+=2)
  11. {
  12. p=0;
  13. while(k%d==0)
  14. ++p,k/=d;
  15. nrd*=p+1;
  16. }
  17. if(k>1)
  18. nrd*=2;
  19. return nrd;
  20. }
  21.  
  22. void Initializare(char S[],int Max) /// Initializarea multimii S
  23. {
  24. for(int i=1;i<=Max;++i)
  25. S[i/8]=S[i/8]&(255^(1<<(i%8)));
  26. }
  27.  
  28. void Adaugare(char S[],int x)
  29. {
  30. S[x/8]=S[x/8]|(1<<(x%8));
  31. }
  32.  
  33. void Afisez(char S[],int Max)
  34. {
  35. ofstream g("masterpiece001.out");
  36. for(int i=1;i<=Max;++i) /// Parcurg multimea S (vectorul de frecventa)
  37. if(S[i/8]&(1<<(i%8))) /// si daca bitul e 1
  38. g<<i<<' '; /// afisez i
  39. g.close();
  40. }
  41.  
  42. int main()
  43. {
  44. int n,x,MAX=0,nrmaxdiv=0;
  45. char S[60010]={},F[60010]={}; /// F retine o singura data fiecare numar
  46. ifstream f("masterpiece001.in");
  47. f>>n;
  48. int nrd;
  49. for(int i=1;i<=n;++i)
  50. {
  51. f>>x;
  52. if(x>MAX) /// Retin valoarea maxima x citita
  53. MAX=x;
  54. if(!(F[x/8]&(1<<(x%8)))) /// Daca bitul corespunzator lui x este 0
  55. {
  56. F[x/8]=F[x/8]|(1<<(x%8)); /// Pun bitul corespunzator al lui x pe 1
  57. nrd=NrDiv(x);
  58. if(nrd>nrmaxdiv)
  59. {
  60. nrmaxdiv=nrd;
  61. Initializare(S,MAX);
  62. Adaugare(S,x);
  63. }
  64. else
  65. if(nrd==nrmaxdiv)
  66. Adaugare(S,x);
  67. }
  68. }
  69. f.close();
  70. Afisez(S,MAX);
  71. return 0;
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement