De exemplu: n=4, a=(12,16,20,8)=>cmmdc=4
#include<iostream>
using namespace std;
int a[100],n,x;
void citire()/*citim datele de intrare*/
{
cout<<"numarul de elemente=";cin>>n;
cout<<"sirul de elemente\n";
for(int i=1;i<=n;i++)
{cout<<"a["<<i<<"]=";cin>>a[i];
}
}
int cmmdc(int a,int b)/*functia pentru a gasi cmmdc dintre 2 numere*/
{if(a==b)return a;
else if(a>b)return cmmdc(a-b,b);
else return cmmdc(a,b-a);
}
int cmmdc_n(int p,int u)/*functia gaseste cmmdc dintre n numere prinmetoda Divide et impera*/
{ int m;
if(u-p==1) cmmdc(a[p],a[u]); /*daca in subsir avem 2 elemente apelam functia pentru calculul cmmdc dintre cele 2 elemente. Subsirul are doua elemente daca diferenta dintre pozitia primului element si pozitia ultimului element din sir este 1*/
else
if(p==u) return a[p];/*daca sirul are un singur element atunci cmmdc=cu acest element*/
else
{
m=(p+u)/2;/*gasim pozitia elementului din mijloc*/
return cmmdc(cmmdc_n(p,m),cmmdc_n(m+1,u));/*gasim cmmdc dintre cele 2 cmmdc rezultate prin rezolvarea celor 2 subprobleme*/
}
}
int main()
{
citire();
cout<<"cmmdc="<<cmmdc_n(1,n);/*primul element din sir este pe pozitia 1, ultimul element din sir este pe pozitia n*/
}

bine .
RăspundețiȘtergerecum ar putea fi acest program pentru un cmmdc cu impartiri in 3 parti aproximativ egale?
RăspundețiȘtergere