Advertisement
a53

sort_div

a53
Apr 11th, 2020
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.12 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. struct numar
  4. {
  5. int nr,nrdv,cfc,pc;
  6. };
  7. numar v[10005];
  8. int n,x;
  9.  
  10. int NrDivizori(int nm)
  11. {
  12. int nrd=1,p=0,d;
  13. while(nm%2==0)
  14. nm/=2,++p;
  15. if(p!=0)
  16. nrd*=(p+1);
  17. for(d=3;d*d<=nm;d+=2)
  18. {
  19. p=0;
  20. while(nm%d==0)
  21. ++p,nm/=d;
  22. if (p!=0)
  23. nrd*=(p+1);
  24. }
  25. if(nm>1)
  26. nrd*=2;
  27. return nrd;
  28. }
  29.  
  30. int digSum(int nm)
  31. {
  32. if(nm==0)
  33. return 0;
  34. return (nm %9==0)?9:(nm%9);
  35. }
  36.  
  37. bool Compare(numar a,numar b)
  38. {
  39. if(a.nrdv!=b.nrdv)
  40. return a.nrdv<b.nrdv;
  41. if(a.cfc!=b.cfc)
  42. return a.cfc<b.cfc;
  43. if(a.pc!=b.pc)
  44. return a.pc<b.pc;
  45. return a.nr<b.nr;
  46. }
  47.  
  48. int main()
  49. {
  50. ifstream fin("sort_div.in");
  51. fin>>n;
  52. for(int i=0;i<n;++i)
  53. {
  54. fin>>x;
  55. v[i].nr=x;
  56. v[i].cfc=digSum(x);
  57. v[i].nrdv=NrDivizori(x);
  58. while(x>9)
  59. x/=10;
  60. v[i].pc=x;
  61. }
  62. sort(v, v+n, Compare);
  63. ofstream fout("sort_div.out");
  64. for(int i=0;i<n;++i)
  65. fout<<v[i].nr<<" ";
  66. return 0;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement