Rezolvare completă PbInfo #1956 Siruri2

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 Adresa de email.

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!