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ă
b
este medie armonică între două numere diferitea
șic
atunci 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!