Spunem că trei numere a b c sunt în progresie armonică dacă b este media armonică a numerelor a și c, adică
\( b = \frac{2}{\frac{1}{a} + \frac{1}{c}} = \frac{2 \cdot a \cdot c} {a + c} \)
Cerința
Cunoscând un număr natural b să se determine toate perechile de numere naturale (a,c) pentru care a b c sunt în progresie armonică.
Date de intrare
Fișierul de intrare armonica.in conține pe prima linie numărul b.
Date de ieșire
Fișierul de ieșire armonica.out va conține pe prima linie numărul n, reprezentând numărul de perechi de numere naturale (a,c) pentru care b este media armonică. Pe următoarele linii se vor afișa perechile de numere cerute. Astfel fiecare dintre următoarele n linii vor conține câte două numere a și c separate printr-un spațiu cu semnificația că b este medie armonică a numerelor a și c.
Restricții și precizări
1 ≤ b ≤ 1 000 000 000;- Pentru teste în valoare de 40 de puncte avem
b ≤ 1 000 000; - Perechile de numere din fișierul de ieșire pot fi afișate în orice ordine;
- Dacă
beste medie armonică între două numere diferiteașicatunci perechile(a,b)și(c,a)sunt considerate soluții distincte. - În concurs s-au acordat 10 puncte din oficiu. Pe site se acordă 10 puncte pentru exemplu.
Exemplu
armonica.in
3
armonica.out
3 3 3 2 6 6 2
Explicație
Numărul 3 este medie armonică a numerelor 3 și 3. Avem progresia armonică (3,3,3)
Numărul 3 este medie armonică a numerelor 2 și 6. Avem progresiile armonice (2,3,6) și (6,3,2).
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema Armonica:
#include <bits/stdc++.h>
#define tip long long
using namespace std;
ifstream f("armonica.in");
ofstream g("armonica.out");
tip b;
void factorizare(tip),bkt(tip,tip);
vector<pair<tip,tip>>F,sol;
vector<pair<int,int>> V;
int main()
{
f>>b;
if(b%2)
factorizare(b);
else
factorizare(b/2);
bkt(0,1);
g<<sol.size()<<'\n';
for(auto it:sol)
g<<it.first<<' '<<it.second<<'\n';
return 0;
}
void factorizare(tip k)
{
for(tip i=2;i*i<=k;i++)
if(k%i==0)
{
tip e=0;
while(k%i==0)
{
e++;k/=i;
}
F.push_back({i,2*e});
}
if(k>1)
F.push_back({k,2});
}
void bkt(tip p,tip d)
{
if(p==F.size())
{
tip a,c,x;
if(b%2)
{
x=b*b/d;
a=(b+d)/2;
c=(b+x)/2;
}
else
{
x=b*b/4/d;
a=b/2+d;
c=b/2+x;
}
//g<<d<<' '<<x<<'\n';
sol.push_back({a,c});
return;
}
tip i=F[p].first,j=F[p].second,m=1;
for(tip q=0;q<=j;q++)
{
bkt(p+1,d*m);
m*=i;
}
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa
.
Rezolvarea problemei #2106 Armonica
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2106 Armonica de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!