Sunteți pe pagina 1din 3

Problema 2

Enunt:
Problema: Se citeste un numar natural x. Sa se determine cel mai mare divizor al numarului x care
se poate exprima ca produs de numere prime distincte.
#include <iostream.h>
#include <conio.h>
void main(void)
{
clrscr();
int x;
int nrdiv,i,divizor,putere;
do
{
cout<<"Dati valoarea lui x=";
cin>>x;
}while(x<=0);
nrdiv=0;
for(i=1;i<=x;i++)
if(x%i==0)nrdiv++;
if(nrdiv==1)
cout<<"Numarul gasit este 1";
else
if(nrdiv==2)
cout<<"Numarul este prim si nu poate fi descompus !";
else
{
cout<<"Cel mai mare divizor al lui "<<x<<" este "<<x<<endl;
cout<<"Si are reprezentarea =";
divizor=2;
while(x!=1)
{
putere=0;
while(x%divizor==0)
{
putere++;
x=x/divizor;
}
if(putere!=0)cout<<divizor<<"^"<<putere<<"*";
divizor++;
}
cout<<'\b';//simulez un backspace , ca sa sterg ultimul semn *
cout<<'\t';//simulez un tab
}

getch();
}

Problema 2
Enunt:
Se citesc n numere intregi cu cel mult 4 cifre fiecare. Sa se determinte cele mai mari 3 patrate
perfecte citite. Daca nu s au citit macar 3 patrate perfecte se va da mesajul nu exista.

#include <iostream.h>
#include <conio.h>
void main(void)
{
int x,i,j,n,nrdiv,nrpp,k;
int v[100];
clrscr();
cout<<"Dati numarul de valori din sir ";
cin>>n;
nrpp=0;
k=0;
for(i=1;i<=n;i++)
{
do
{
cout<<"Dati valoarea numarului "<<i<<" din sir ";
cin>>x;
}while(x<=0);//regula anti-prost !, sa nu introduca valori <=0
nrdiv=0;
for(j=1;j<=x;j++)
if(x%j==0)
nrdiv++;
if(nrdiv%2!=0)
{
v[k]=x;//il salvez intr-un vector de patrate perfecte
k++;//fac loc la un alt element care poate fi plasat
nrpp++;//daca x are un numar impar de divizori,
//este patrat perfect si se numara
}
}
if(nrpp<=2)cout<<"Nu s-au citit 3 numare patrate perfecte !";
else
{
k--;
//sortez descrescator vectorul de patrate perfecte
int gasit;

do
{
gasit=0;
for(int z=0;z<=k-1;z++)
if(v[z]<v[z+1])
{
int t=v[z];
v[z]=v[z+1];
v[z+1]=t;
gasit=1;
}
}
while(gasit==1);
cout<<"Cele mai mari trei patrate perfecte sunt ";
cout<<v[0]<<" "<<v[1]<<" "<<v[2];
}
getch();
}