Răspuns :
#include <bits/stdc++.h>
using namespace std;
ifstream fin("sortare_divizori.in");
ofstream fout("sortare_divizori.out");
int n,a[1001],b[1001];
unsigned long Count(unsigned long a);
int main()
{
fin >> n;
for(int i=1;i<=n;i++)
{
fin >> a[i];
b[i]=Count(a[i]);
}
for(int i=1;i<n;i++)
for(int j=i+1;j<=n;j++)
{
if(b[i]<b[j])
{
swap(b[i],b[j]);
swap(a[i],a[j]);
}
else if(b[i]==b[j])
if(a[i]>a[j])
swap(a[i],a[j]);
}
for(int i=1;i<=n;i++)
cout << a[i] << " ";
return 0;
}
unsigned long Count(unsigned long a)
{
unsigned long count = 1, k = 0, i;
if (a == 1 || a == 2)
return a;
while ((a & 1) == 0)
{
k++;
a >>= 1;
}
if (a == 1)
return k + 1;
else
count = k + 1;
for(i = 3; i*i <= a; i += 2)
{
k = 0;
while(a % i == 0)
{
k++;
a /= i;
}
count *= (k + 1);
}
if (a > 1)
count <<= 1;
return count;
}
using namespace std;
ifstream fin("sortare_divizori.in");
ofstream fout("sortare_divizori.out");
int n,a[1001],b[1001];
unsigned long Count(unsigned long a);
int main()
{
fin >> n;
for(int i=1;i<=n;i++)
{
fin >> a[i];
b[i]=Count(a[i]);
}
for(int i=1;i<n;i++)
for(int j=i+1;j<=n;j++)
{
if(b[i]<b[j])
{
swap(b[i],b[j]);
swap(a[i],a[j]);
}
else if(b[i]==b[j])
if(a[i]>a[j])
swap(a[i],a[j]);
}
for(int i=1;i<=n;i++)
cout << a[i] << " ";
return 0;
}
unsigned long Count(unsigned long a)
{
unsigned long count = 1, k = 0, i;
if (a == 1 || a == 2)
return a;
while ((a & 1) == 0)
{
k++;
a >>= 1;
}
if (a == 1)
return k + 1;
else
count = k + 1;
for(i = 3; i*i <= a; i += 2)
{
k = 0;
while(a % i == 0)
{
k++;
a /= i;
}
count *= (k + 1);
}
if (a > 1)
count <<= 1;
return count;
}
Vă mulțumim pentru vizita pe site-ul nostru dedicat Informatică. Sperăm că informațiile disponibile v-au fost utile și inspiraționale. Dacă aveți întrebări sau aveți nevoie de suport suplimentar, suntem aici pentru a vă ajuta. Ne face plăcere să vă revedem și vă invităm să adăugați site-ul nostru la favorite pentru acces rapid!