Documente Academic
Documente Profesional
Documente Cultură
S se implementeze o funcie C/C++ care, pentru n i p numere naturale date, s calculeze suma primelor n numere naturale care sunt divizibile cu p. Avem: S = p + 2 p + 3 p + L + np = i p = p i =
i =1 i =1 n n
p n (n + 1) 2
Varianta 1
#include<iostream.h> int suma(int n, int p) { int s=0; for (int i=p; i<=n*p; i+=p) s+=i; return s; } void main() { int n, p; cout<<"\n n ? "; cin>>n; cout<<"\n p ? "; cin>>p; cout<<"\n Suma este "<<suma(n, p); }
Varianta 2
#include<iostream.h> int suma(int n, int p) { int s=0; for (int i=1; i<=n; i++) s+=i*p; return s; } void main() { int n, p; cout<<"\n n ? "; cin>>n; cout<<"\n p ? "; cin>>p; cout<<"\n Suma este "<<suma(n, p); }
Obs. n funcia suma se efectueaz un numr Obs. n funcia suma se efectueaz o singur constant de operaii: dou nmuliri, o mprire nmulire. i o adunare.
PROBLEME REZOLVATE 2. S se implementeze o funcie C/C++ care calculeaz suma divizorilor proprii ai unui numr natural.
Varianta 1
#include <iostream.h> int sumaDivP(int n) { int s=0; int lim=n/2; for(int i=2;i<=lim;i++) if(n%i==0) s+=i; return s; } void main() { int n; cout<<"\n n ? "; cin>>n; cout<<"\n Suma = "<<sumaDivP(n); }
Varianta 2. Micorm numrul de operaii (pai), mergnd cu cutarea divizorilor pn la n i innd cont de faptul c dac i este n divizor al lui n, atunci i este divizor al lui n. i
#include <iostream.h> #include <math.h> int sumaDivP(int n) { int s=0; int lim=sqrt(n); for(int i=2;i<=lim;i++) if(n%i==0) s+=i+n/i; if(lim*lim==n)s-=lim; return s; } void main() { int n; cout<<"\n n ? "; cin>>n; cout<<"\n Suma = "<<sumaDivP(n); }
Varianta 4
#include <iostream.h> int sumaDivP(int n) { int s=0,i; for(i=2;i*i<n;i++) if(n%i==0) s+=i+n/i; if(i*i==n)s+=i; return s; } void main() { int n; cout<<"\n n ? "; cin>>n; cout<<"\n Suma = "<<sumaDivP(n); }
Obs. n corpul funciei sumaDivP, condiia i*i<=n (a instruciunii for) se poate nlocui cu i<=n/i, evitndu-se n acest fel eventualele depiri atunci cnd se calculeaz i*i.