Documente Academic
Documente Profesional
Documente Cultură
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.
///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;
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;
}