1159 - Smen

From Bitnami MediaWiki
Revision as of 15:14, 24 March 2023 by Ardelean Alexandru (talk | contribs) (Pagină nouă: ==Cerința== Se dă un șir <code>V</code>. Știind <code>V0 = 3</code> și regula de formare a șirului: <code>V<sub>i</sub> = ([V<sub>i-1</sub>*V<sub>i-1</sub> / (i + 2)] + V<sub>i-1</sub> * i + i + 1) % 666013</code>. să se determine al <code>n</code>-lea termen al șirului. (unde <code>[x]</code> reprezintă partea întreagă a numărului <code>x</code>) ==Date de intrare== Fișierul de intrare <code>smen.in</code> conține numărul <code>n</code>. ==Date de ieșire=...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerința

Se dă un șir V. Știind V0 = 3 și regula de formare a șirului:

Vi = ([Vi-1*Vi-1 / (i + 2)] + Vi-1 * i + i + 1) % 666013.

să se determine al n-lea termen al șirului. (unde [x] reprezintă partea întreagă a numărului x)

Date de intrare

Fișierul de intrare smen.in conține numărul n.

Date de ieșire

Fișierul de ieșire smen.out va conține al n-lea termen al șirului.

Restricții și precizări

  • 1 ≤ n ≤ 20.000.000

Exemplu 1

Intrare
10000000
Ieșire
22230

Exemplu 2

Intrare
21345670
Ieșire
Date de intrare gresite!

Rezolvare

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

  1. 1159 Smen


def conditii(n):

   return 1 <= n <= 20_000_000


def main():

   n = int(input())
   if not conditii(n):
       return print("Date de intrare gresite!")
   v_n, v_i = 3, 0
   for i in range(n+1):
       v_i = ((v_n * v_n // (i+2)) + v_n * i + i + 1) % 666013
       v_n = v_i
   print(v_i)


if __name__ == "__main__":

   main()

</syntaxhighlight>