Fibonacci, un celebru matematician italian din Evul Mediu, a descoperit un șir de numere naturale cu multiple aplicații, șir ce-i poartă numele:
\( Fibonacci(n)=\begin{cases} 1& \text{dacă $n=1$ sau $n=2$ }\\Fibonacci(n-1)+Fibonacci(n-2)& \text{dacă $n>2$}\end{cases} \)
Fascinat de șirul lui Fibonacci, și mai ales aplicațiile acestui șir în natură, Iccanobif, un matematician în devenire, a creat un șir si el un care-i poartă numele:
\( Iccanobif(n)=\begin{cases} 1& \text{dacă $n=1$ sau $n=2$ }\\răsturnat(Iccanobif(n-1))+răsturnat(Iccanobif(n-2))& \text{dacă $n>2$}\end{cases} \)
Obținându-se astfel șirurile:
- Fibonacci:
1
,1
,2
,3
,5
,8
,13
,21
,34
,55
,89
,144
, … - Iccanobif:
1
,1
,2
,3
,5
,8
,13
,39
,124
,514
,836
, …
Iccanobif, se întreabă acum, ce număr are mai mulți divizori numere naturale: al n
-lea termen din șirul Fibonacci sau al n
-lea termen din șirul său.
Cerințe
Scrieți un program care să citească un număr natural n
și să afișeze:
a) al n
-lea termen din șirul lui Fibonacci și numărul său de divizori
b) al n
-lea termen din șirul lui Iccanobif și numărul său de divizori
Date de intrare
Fișierul de intrare siruri2.in
conține pe prima linie un număr natural p
. Pentru toate testele de intrare, numărul p
poate avea doar valoarea 1
sau valoarea 2
. Pe linia a doua a fișierului se găsește un număr natural n
.
Date de ieșire
Dacă valoarea lui p
este 1
, se va rezolva numai punctul a) din cerințe. În acest caz, în fișierul de ieșire siruri2.out
se vor scrie al n
-lea termen din șirul lui Fibonacci și numărul său de divizori.
Dacă valoarea lui p
este 2
, se va rezolva numai punctul b) din cerințe. În acest caz, în fișierul de ieșire siruri2.out
se vor scrie al n
-lea termen din șirul lui Iccanobif și numărul său de divizori
Restricții și precizări
1 ≤ n ≤ 50
- Pentru rezolvarea corectă a primei cerinţe se acordă 50% din punctaj, iar pentru cerința a doua se acordă 50% din punctaj.
Exemplul 1
siruri2.in
1 8
siruri2.out
21 4
Exemplul 2
siruri2.in
2 9
siruri2.out
124 6
Explicații
Pentru primul exemplu: Al optulea termen din șirul lui Fibonacci este 21
, iar 21
are 4
divizori. (p
fiind 1
se rezolvă doar cerința a)
Pentru al doilea exemplu: Al nouălea termen din șirul lui Iccanobif este 124
, iar 124
are 6
divizori. (p
fiind 2
se rezolvă doar cerința b)
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 Siruri2:
#include <fstream>
using namespace std;
int main()
{
long long a = 1 , b = 1 , ra = 1 , rb , bb , nrd = 2 , c , d;
int n , i , p;
ifstream f("siruri2.in");
ofstream g("siruri2.out");
f >> p >> n;
if (n == 1 || n == 2) g << 1 << ' ' << 1;
else
{
if (p == 1)
for (i = 3; i <= n; i++)
{
c = a + b;
a = b;
b = c;
}
else
for (i = 3 ; i <= n ; i++)
{
rb = 0;
bb = b;
while (bb)
{
rb = rb * 10 + bb % 10;
bb = bb / 10;
}
c = ra + rb;
a = b;
ra = rb;
b = c;
}
for(d = 2; d * d < c; d++)
if(c % d == 0) nrd += 2;
if (d * d == c) nrd++;
g << c << " " << nrd;
}
return 0;
}
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 #1956 Siruri2
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1956 Siruri2 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!