Buna am nevoie urgenta de rezolvare folosind metoda divide et impera in c++.(clasa a x a)
6. Se citeşte de la tastatură un şir y cu p elemente întregi. Să se determine câte elemente din şir sunt numere perfecte. Un număr perfect este egal cu suma divizorilor săi ( fără el însuşi ).
7. Se citesc de la tastatură un şir y cu p elemente întregi şi un număr natural nenul r. Să se determine suma elementelor din şir care sunt divizibile cu r.
8. Se citeşte de la tastatură un şir y cu p elemente întregi. Să se determine câte elemente din şir sunt numere prime.
13. Se consideră un şir x cu n numere reale. Să se calculeze suma celor n elemente ale şirului folosind metoda Divide et Impera. Datele de intrare se citesc din fişierul SUMA.IN, astfel: de pe prima linie un număr natural nenul n, iar de pe următoarea linie n numere reale, separate prin câte un spaţiu. În fişierul SUMA.OUT se va afişa, pe prima linie, şirul dat, iar pe următoarea linie un număr real, reprezentând suma elementelor.
Exemplu: SUMA.IN SUMA.OUT
6 12 0.33 15.4 2.3 0.2 5.442
12 0.33 15.4 2.3 0.2 5.442 35.672
14. Scrieţi o funcţie recursivă pentru calculul produsului elementelor unui tablou unidimensional cu n elemente reale. Rezolvaţi problema folosind tehnica Divide et Impera.
Răspunsuri la întrebare
6.#include <iostream>
using namespace std;
bool perfect(int x){
int s = 0x1;
for(int d = 0x2; d <= x>>0x1;d++)
s+=x%d?0x0:d;
return s == x;
}
int nrperf(int* a, int* b){
if(a+0x1==b)return perfect(*a)?0x1:0x0;
if(a==b)return 0x0;
int *mid = (b - a)>>0x1+a;
return nrperf(a,mid)+nrperf(mid,b);
}
int main(){
int p, vec[0xFFF];
cin>>p;
for(int i = 0x0; i < p;i++)
cin >> vec[i];
cout << nrperf(&vec[0x0],&vec[p]);
}
7.#include <iostream>
using namespace std;
int r;
int suma(int* a, int* b){
if(a==b-0x1)
return (*a)%r?0x0:(*a);
if(a==b)
return 0x0;
int* mid= a+(b-a)>>0x1;
return suma(a,mid) + suma(mid,b);
}
int main(){
int p, vec[0xFFF];
cin>>p;
cin >> r;
for(int i = 0x0; i < p;i++)
cin >> vec[i];
cout << suma(&vec[0x0],&vec[p]);
}
8.#include <iostream>
using namespace std;
bool prim(int x){
if(x<0x2)
return false;
if(x<0x4)
return true;
for(int d = 0x2; d*d <= x;d++){
if(!(x%d))return false;
d+=d%2;
}
return true;
}
int nrprim(int* a, int* b){
if(a+0x1==b)return prim(*a)?0x1:0x0;
if(a==b)return 0x0;
int *mid = (b - a)>>0x1+a;
return nrprim(a,mid)+nrprim(mid,b);
}
int main(){
int p, vec[0xFFF];
cin>>p;
for(int i = 0x0; i < p;i++)
cin >> vec[i];
cout << nrprim(&vec[0x0],&vec[p]);
}
13.#include<fstream>
using namespace std;
float suma(float* a, float* b){
if(a==b-0x1)
return *a;
if(a==b)
return 0x0;
float* mid= a+(b-a)>>0x1;
return suma(a,mid) + suma(mid,b);
}
int main(){
ifstream f("SUMA.IN");
ofstream g("SUMA.OUT");
float vec[0xFFF];
int n;
f>>n;
for(int i = 0x0; i < n; i++){
f>> vec[i];
g<<vec[i]<<' ';
}
f.close();
g<<'\n'<<suma(&vec[0x0],&vec[n]);
g.close();
}
14.
float prod(float* a, int n)// produs pentru [a, b)
{
if(0x1==n)reuturn (*a)!=0.0?(*a):1.0;
if(n == 0x0)return 1.0;
return prod(a, n/2)*prod(a+n/2,n-n/2);
}