Sunteți pe pagina 1din 2

SUBIECTUL III

1)
Atenţie la detaliile cerinţei: prin parametrul n
primeşte iar prin parametrii d şi p furnizează
iar funcţia nu întoarce nimic, deci va fi de tip void.
Ceea ce se cere este destul de clasic: o descompunere
în factori primi din care facem un maxim după puterea
factorului, iar maximul îl facem cu >= deoarece la
puteri egale ni se cere cel mai mare factor, or factorii
se obţin anyway în ordine crescătoare.

Mai jos avem două variante: prima e neeficientă iar a


doua e eficientă, de descompunere în factori primi:
*/
///varianta neeficientă
void putere(int n,int &d,int &p)
{
p=0;///p = parametrul în care calc. puterea maximă
int dc=2,pc;///dc=divizorul curent
///pc=puterea curentă
while(n>1)
{
pc=0;
while(n%dc==0)
{
n/=dc;
pc++;
}
if(pc>=p)
{
p=pc;
d=dc;
}
dc++;
}
}

///varianta eficientă
void putere_eficient(int n,int &d,int &p)
{
p=0;///p = parametrul în care calc. puterea maximă
int dc=2,pc;///dc=divizorul curent
///pc=puterea curentă
while(dc*dc<=n)
{
pc=0;
while(n%dc==0)
{
n/=dc;
pc++;
}
if(pc>=p)
{
p=pc;
d=dc;
}
dc++;
}
if(n>1 && p==1) d=n;
}
2)
#include <iostream>
using namespace std;

///Problema aceasta admite o grămadă de rezolvări.


///V-o dau aici pe cea mai scurtă

int main()
{
int n,k,i,j,a[21][401];
cin>>n>>k;
for(i=1;i<=n;i++)
{
for(j=1;j<=n*k;j++)
{
a[i][j]=i+(j-1)/k;
cout<<a[i][j]<<" ";
}
cout<<"\n";
}
return 0;
}

3)
/**
Problema de faţă este foarte simplă, dat fiind
că se garantează că acele două valori citite sunt
valorile a doi termeni consecutivi din acel şir.
Astfel, n-avem decât să explicităm termenul f[n-2]
în funcţie de ceilalţi doi, din formula de recurenţă,
astfel obţinând
f[n-2]=3*f[n-1]-f[n]
Evident NU lucrăm cu vectori ci cu 3 variabile în care
reţinem la fiecare pas cei trei termeni vecini ai
şirului la acel pas.
Algoritmul este eficient d.p.d.v. al timpului de executare
deoarece se fac puţini paşi pentru că se determină direct
termenii care trebuie afişaţi, fără alte operaţii suplimentare,
algoritmul fiind liniar.
Algoritmul este eficient d.p.d.v. al memoriei deoarece
utilizează doar câteva variabile simple.
*/
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
int x,y,z;
ofstream fout("bac.txt");
cin>>x>>y;
fout<<y<<" "<<x<<" ";
while(y>1)
{
z=3*x-y;
fout<<z<<" ";
y=x;x=z;
}
return 0;
}

S-ar putea să vă placă și

  • Vocab
    Vocab
    Document1 pagină
    Vocab
    Doru MODRISAN
    Încă nu există evaluări
  • Cicloida
    Cicloida
    Document2 pagini
    Cicloida
    Doru MODRISAN
    Încă nu există evaluări
  • Cicloida
    Cicloida
    Document2 pagini
    Cicloida
    Doru MODRISAN
    Încă nu există evaluări
  • 22 12 13lucrare
    22 12 13lucrare
    Document3 pagini
    22 12 13lucrare
    Doru MODRISAN
    Încă nu există evaluări