Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- struct numar
- {
- int nr,nrdv,cfc,pc;
- };
- numar v[10005];
- int n,x;
- int NrDivizori(int nm)
- {
- int nrd=1,p=0,d;
- while(nm%2==0)
- nm/=2,++p;
- if(p!=0)
- nrd*=(p+1);
- for(d=3;d*d<=nm;d+=2)
- {
- p=0;
- while(nm%d==0)
- ++p,nm/=d;
- if (p!=0)
- nrd*=(p+1);
- }
- if(nm>1)
- nrd*=2;
- return nrd;
- }
- int digSum(int nm)
- {
- if(nm==0)
- return 0;
- return (nm %9==0)?9:(nm%9);
- }
- bool Compare(numar a,numar b)
- {
- if(a.nrdv!=b.nrdv)
- return a.nrdv<b.nrdv;
- if(a.cfc!=b.cfc)
- return a.cfc<b.cfc;
- if(a.pc!=b.pc)
- return a.pc<b.pc;
- return a.nr<b.nr;
- }
- int main()
- {
- ifstream fin("sort_div.in");
- fin>>n;
- for(int i=0;i<n;++i)
- {
- fin>>x;
- v[i].nr=x;
- v[i].cfc=digSum(x);
- v[i].nrdv=NrDivizori(x);
- while(x>9)
- x/=10;
- v[i].pc=x;
- }
- sort(v, v+n, Compare);
- ofstream fout("sort_div.out");
- for(int i=0;i<n;++i)
- fout<<v[i].nr<<" ";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement