1.Se citesc de la tastaura n numere. Folosind metoda Divide et impera afisati cate dintre cele n numere citite sunt prime.
#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 prim(int n)/*verificam daca numarul e prim*/
{
if(n<=1) return 0;/*primul numar prim este 2*/
int i=2;
while(i<=n/2) /*daca numarul are divizori proprii, nu este prim*/
if(n%i==0)return 0;
else i++;
return 1;
}
int numara(int p,int u) /*cautam numarul de numere prime*/
{ int m,n1,n2;
if(u==p) if(prim(a[p])) return 1;/*daca subsirul are un singur element verificam daca este prim. in caz afirmativ returnam 1 deoarece numarul de numere prime creste cu 1*/
else return 0;/*daca elementul nu e prim, valoarea returnata de contor nu se schimba*/
else
{
m=(p+u)/2;/*gasim pozitia elementului din mijloc si gasim numarul de numere prime din fiecare subproblema*/
n1=numara(p,m);
n2=numara(m+1,u);
return n1+n2;
}
}
int main()
{
citire();
cout<<"numarul de numere prime="<<numara(1,n);/*primul numar se gaseste pe pozitia 1 iar ultimul pe pozitia n*/
}
Niciun comentariu:
Trimiteți un comentariu