Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <algorithm>
- using namespace std;
- FILE *f,*g;
- struct sir
- {
- int nr;
- int nd;
- };
- sir a[1000];
- int n;
- inline bool cmp(sir a,sir b)
- {
- if(a.nd==b.nd)
- return a.nr<b.nr;
- else
- return a.nd>b.nd;
- }
- int nrdiv(int n)
- {
- int p=1,d,exp=0; // p retine numarul divizorilor
- if(n%2==0)
- {
- while(n%2==0)
- {
- exp++;
- n=n/2;
- }
- p*=(exp+1);
- }
- d=3;
- while(n>1)
- {
- if(n%d==0)
- {
- exp=0;
- while(n%d==0)
- {
- exp++;
- n=n/d;
- }
- p*=(exp+1);
- }
- else
- d+=2;
- if(n>1&&d*d>n)
- {
- p*=2; // aici exp=1
- break;
- }
- }
- return p;
- }
- int main()
- {
- f=fopen("sortare_divizori.in","rt");
- g=fopen("sortare_divizori.out","wt");
- fscanf(f,"%d",&n);
- for(int i=0;i<n;i++)
- {
- fscanf(f,"%d ",&a[i].nr);
- a[i].nd=nrdiv(a[i].nr);
- }
- sort(a,a+n,cmp);
- for(int i=0;i<n;i++)
- fprintf(g,"%d ",a[i].nr);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement