Informatică, întrebare adresată de feherdarius, 9 ani în urmă

Cum sa fac acest algoritm mai eficient?

Se dau n numere naturale. Afișați aceste numere ordonate crescător după suma divizorilor. Dacă două numere au aceeași sumă a divizorilor, se va afișa mai întâi cel mai mic.

Anexe:

AntiEaglesDavids: rezolvarea asta am mai vazut-o parca...
feherdarius: Dar nu la mine. ;)

Răspunsuri la întrebare

Răspuns de Silhouette66
3
#include <iostream>using namespace std;int s(int x) {int i,sum=0; for (i=1;i<=x;i++) if (x%i==0) sum=sum+i; return sum};int main() {int n,v[100],i,aux,j cin>>n; for (i=1;i<=n;i++) cin>>v[i]; for (i=1;i<n;i++) for (j=i+1;j<=n;j++) if (sum(v[i])>sum(v[j]) || (sum(v[i])==sum(v[j]) && v[i]>v[j])) {aux=v[i];        v[i]=v[j];        v[j]=aux;}; for (i=1;i<=n;i++) cout<<v[i]; return 0;}
Nu stiu pentru ce ai pus si vectorul x :-? si trebuie declarati si vectorii la inceput

AntiEaglesDavids: e clar ca mai mult de juma de giba ram nu va lua programu deci se va putea executa!
AntiEaglesDavids: acum ca am ajuns de la 16 gb memorie la vreo 0.5 gb (in cel mai rau caz) putem sa optimizam viteza cumva
AntiEaglesDavids: nu mai tin minte exact dar parca in loc sa verific de la 1 la 2^31 puteam pana la 1 la sqrt(2^31) in primul loop din ciur insa va trebui sa parcurg apoi liniar C ca sa adaug in nrPrime.
AntiEaglesDavids: dar decat NlogN mai degraba sqrt(N)logN + N
AntiEaglesDavids: cu descomp in factori primi, am putea pt inceput sa facem suma divizorilor pt numere prime instant (cu C) ca sa scapam de un milion de iteratii pe nr prim
AntiEaglesDavids: ca acum cum e scris codul meu, daca introduci un nr prim trebuie sa parcurgi C pana gasesti chiar numarul insusi, ceea ce ia extrem de mult
AntiEaglesDavids: cum vrem sa lucram cu nr pana in 2^31 va trebui totusi sa schimbam majoritatea variabilelor in long long deoarece va aparea overflowul cu siguranta
AntiEaglesDavids: pow() trebuie neaparat modificat cu o ridicare la putere in timp logaritmic...
AntiEaglesDavids: cam atat am gasit optimizari pana acum... probabil sunt mai multe insa las pe mai tarziu
AntiEaglesDavids: in orice caz, codul asta e mult, mult mai rapid pt un N mare (ma refer la cate nr sunt, nu cat de mari sunt)
Alte întrebări interesante