3176 - Fibonacci perechi: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: Se consideră şirul Fibonacci, definit astfel: f1=1, f2=1, fn=fn−1+fn−2, dacă n>2. ==Cerință== Se dau perechi de numere '''a''' și '''b''' cu '''a ≤ b'''. Să se calculeze pentru câte perechi fb este multiplu de fa. ==Date de intrare== Fișierul de intrare '''fibo0.in''' conține pe fiecare linie câte două numere '''a''' și '''b''' cu semnificația din enunț . ==Date de ieșire== Fișierul de ieșire '''fibo0.out''' va conține pe prima linie numărul ''...
 
No edit summary
Line 7: Line 7:
==Date de intrare==
==Date de intrare==


Fișierul de intrare '''fibo0.in''' conține pe fiecare linie câte două numere '''a''' și '''b''' cu semnificația din enunț .
Fișierul de intrare '''fibo0in.txt''' conține pe fiecare linie câte două numere '''a''' și '''b''' cu semnificația din enunț .


==Date de ieșire==
==Date de ieșire==


Fișierul de ieșire '''fibo0.out''' va conține pe prima linie numărul '''N''', reprezentând numărul de perechi ce respectă condiția impusă .
Fișierul de ieșire '''fibo0out.txt''' va conține pe prima linie numărul '''N''', reprezentând numărul de perechi ce respectă condiția impusă .


==Restricții de precizări==
==Restricții de precizări==
Line 18: Line 18:
*Numerele citite vor fi numere naturale strict mai mari decât '''2''' și mai mici decât '''2.000.000.002'''
*Numerele citite vor fi numere naturale strict mai mari decât '''2''' și mai mici decât '''2.000.000.002'''


==Exemplu==
==Exemplul 1==
 
'''fibo0in.txt'''


'''fibo0.in'''
:4 9
:4 9
:4 8
:4 8
Line 26: Line 27:
:7 21
:7 21


'''fibo0.out'''
'''fibo0out.txt'''
 
:Datele de intrare corespund restrictiilor impuse.
:2
:2
==Exemplul 2==
'''fibo0in.txt'''
:4 fd
:a 8
:10 hsj2
:7 21
'''fibo0out.txt'''
:Datele de intrare nu corespund restrictiilor impuse.


==Rezolvare==
==Rezolvare==
Line 33: Line 49:
<syntaxhighlight lang="python" line="1" start="1">
<syntaxhighlight lang="python" line="1" start="1">


def fibonacci(n):
def fibonacci(n): # functia de generare a sirului Fibonacci
     fib = [0, 1]
     fib = [0, 1]
     for i in range(2, n+1):
     for i in range(2, n+1):
Line 39: Line 55:
     return fib
     return fib


def count_multiples(pairs):
 
     max_n = max(max(pair) for pair in pairs)
def count_multiples(perechi): # functia de rezolvare
     max_n = max(max(pair) for pair in perechi)
     fib = fibonacci(max_n)
     fib = fibonacci(max_n)
     count = 0
     count = 0
Line 48: Line 65:
     return count
     return count


pairs = [(4, 9), (4, 8), (10, 12), (7, 21)]
 
print(count_multiples(pairs))
def validare(perechi):  # functia de validare a datelor de intrare
with open('fibo0.out', 'w') as f:
    if len(perechi) > 1000:
    f.write(str(count_multiples(pairs)))
        raise ValueError
    for pair in pairs:
        if not all(isinstance(i, int) for i in pair):
            raise ValueError
    file_out.write("Datele de intrare corespund restrictiilor impuse.\n")
 
 
if __name__ == '__main__':
    file_in = open("fibo0in.txt", "r") # declararea fisierelor
    file_out = open("fibo0out.txt", "w")  # fisierul out trebuie declarat cu optiunea "w" (write)
 
    try:
        pairs = [tuple(map(int, line.split())) for line in file_in.readlines()] # citirea perechilor
 
        validare(pairs)  # apelul functiei de validare
        result = count_multiples(pairs) # apelul functiei de rezolvare
        file_out.write(str(result))
 
    except ValueError:
        file_out.write("Datele de intrare nu corespund restrictiilor impuse.")
    except IndexError:
        file_out.write("Datele de intrare nu corespund restrictiilor impuse.")


</syntaxhighlight>
</syntaxhighlight>

Revision as of 23:56, 10 November 2023

Se consideră şirul Fibonacci, definit astfel: f1=1, f2=1, fn=fn−1+fn−2, dacă n>2.

Cerință

Se dau perechi de numere a și b cu a ≤ b. Să se calculeze pentru câte perechi fb este multiplu de fa.

Date de intrare

Fișierul de intrare fibo0in.txt conține pe fiecare linie câte două numere a și b cu semnificația din enunț .

Date de ieșire

Fișierul de ieșire fibo0out.txt va conține pe prima linie numărul N, reprezentând numărul de perechi ce respectă condiția impusă .

Restricții de precizări

  • Se vor citi până la 1.000.000 de perechi
  • Numerele citite vor fi numere naturale strict mai mari decât 2 și mai mici decât 2.000.000.002

Exemplul 1

fibo0in.txt

4 9
4 8
10 12
7 21

fibo0out.txt

Datele de intrare corespund restrictiilor impuse.
2

Exemplul 2

fibo0in.txt

4 fd
a 8
10 hsj2
7 21

fibo0out.txt

Datele de intrare nu corespund restrictiilor impuse.

Rezolvare

<syntaxhighlight lang="python" line="1" start="1">

def fibonacci(n): # functia de generare a sirului Fibonacci

   fib = [0, 1]
   for i in range(2, n+1):
       fib.append(fib[i-1] + fib[i-2])
   return fib


def count_multiples(perechi): # functia de rezolvare

   max_n = max(max(pair) for pair in perechi)
   fib = fibonacci(max_n)
   count = 0
   for a, b in pairs:
       if fib[b] % fib[a] == 0:
           count += 1
   return count


def validare(perechi): # functia de validare a datelor de intrare

   if len(perechi) > 1000:
       raise ValueError
   for pair in pairs:
       if not all(isinstance(i, int) for i in pair):
           raise ValueError
   file_out.write("Datele de intrare corespund restrictiilor impuse.\n")


if __name__ == '__main__':

   file_in = open("fibo0in.txt", "r")  # declararea fisierelor
   file_out = open("fibo0out.txt", "w")  # fisierul out trebuie declarat cu optiunea "w" (write)
   try:
       pairs = [tuple(map(int, line.split())) for line in file_in.readlines()]  # citirea perechilor
       validare(pairs)  # apelul functiei de validare
       result = count_multiples(pairs)  # apelul functiei de rezolvare
       file_out.write(str(result))
   except ValueError:
       file_out.write("Datele de intrare nu corespund restrictiilor impuse.")
   except IndexError:
       file_out.write("Datele de intrare nu corespund restrictiilor impuse.")

</syntaxhighlight>

Explicație

f4=3 , iar f9=34

care NU este multiplu de 3

f4=3 , iar f8=21

care este multiplu de 3

f10=55 , iar f12=144

care NU este multiplu de 55

f7=13 , iar f21=10946

care este multiplu de 13