<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=2556_-_HN</id>
	<title>2556 - HN - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=2556_-_HN"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2556_-_HN&amp;action=history"/>
	<updated>2026-05-01T03:41:23Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2556_-_HN&amp;diff=9746&amp;oldid=prev</id>
		<title>Cristina94: Pagină nouă: ==Enunţ== Fie N un număr natural și expresia HN=1+1/2+1/3+…+1/N.  ==Cerința== Determinați numerele naturale P și Q ce reprezintă numărătorul respectiv numitorul fracției ireductibile HN=P/Q.  ==Date de intrare== Fișierul de intrare hn.in conţine pe prima linie numărul natural N.  ==Date de ieșire== Fișierul de ieșire hn.out va conţine pe prima linie numărul P și pe a doua linie numărul Q.  ==Restricții și precizări== *2 ≤ N ≤ 10000  ==Exemplul 1==...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2556_-_HN&amp;diff=9746&amp;oldid=prev"/>
		<updated>2024-04-01T09:18:52Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: ==Enunţ== Fie N un număr natural și expresia HN=1+1/2+1/3+…+1/N.  ==Cerința== Determinați numerele naturale P și Q ce reprezintă numărătorul respectiv numitorul fracției ireductibile HN=P/Q.  ==Date de intrare== Fișierul de intrare hn.in conţine pe prima linie numărul natural N.  ==Date de ieșire== Fișierul de ieșire hn.out va conţine pe prima linie numărul P și pe a doua linie numărul Q.  ==Restricții și precizări== *2 ≤ N ≤ 10000  ==Exemplul 1==...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Enunţ==&lt;br /&gt;
Fie N un număr natural și expresia HN=1+1/2+1/3+…+1/N.&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
Determinați numerele naturale P și Q ce reprezintă numărătorul respectiv numitorul fracției ireductibile HN=P/Q.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare hn.in conţine pe prima linie numărul natural N.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Fișierul de ieșire hn.out va conţine pe prima linie numărul P și pe a doua linie numărul Q.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
*2 ≤ N ≤ 10000&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1==&lt;br /&gt;
;hn.in&lt;br /&gt;
:6&lt;br /&gt;
&lt;br /&gt;
;hn.out&lt;br /&gt;
:49&lt;br /&gt;
:20&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2==&lt;br /&gt;
;hn.in&lt;br /&gt;
:20&lt;br /&gt;
&lt;br /&gt;
;hn.out&lt;br /&gt;
:55835135&lt;br /&gt;
:15519504&lt;br /&gt;
&lt;br /&gt;
==Exemplul 3==&lt;br /&gt;
;hn.in&lt;br /&gt;
:-10&lt;br /&gt;
&lt;br /&gt;
;hn.out&lt;br /&gt;
:Date de intrare invalide!&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#2556 hn&lt;br /&gt;
def gcd(a, b):&lt;br /&gt;
  while b:&lt;br /&gt;
    a, b = b, a % b&lt;br /&gt;
  return a&lt;br /&gt;
&lt;br /&gt;
def simplify_fraction(num, denom):&lt;br /&gt;
  divisor = gcd(num, denom)&lt;br /&gt;
  return num // divisor, denom // divisor&lt;br /&gt;
&lt;br /&gt;
def calculate_harmonic_fraction(N):&lt;br /&gt;
  numerator = 0&lt;br /&gt;
  denominator = 1&lt;br /&gt;
  for i in range(1, N + 1):&lt;br /&gt;
    numerator = numerator * i + denominator&lt;br /&gt;
    denominator *= i&lt;br /&gt;
  return numerator, denominator&lt;br /&gt;
&lt;br /&gt;
def validate_input(N):&lt;br /&gt;
  if not (isinstance(N, int) and 2 &amp;lt;= N &amp;lt;= 10000):&lt;br /&gt;
    with open(&amp;#039;hn.out&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
      f.write(&amp;quot;Date de intrare invalide!&amp;quot;)&lt;br /&gt;
    return False&lt;br /&gt;
  return True&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  try:&lt;br /&gt;
    # Citirea datelor din fișierul de intrare&lt;br /&gt;
    with open(&amp;#039;hn.in&amp;#039;, &amp;#039;r&amp;#039;) as f:&lt;br /&gt;
      N = int(f.readline().strip())&lt;br /&gt;
  except FileNotFoundError:&lt;br /&gt;
    with open(&amp;#039;hn.out&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
      f.write(&amp;quot;Fisierul de intrare nu a fost gasit.&amp;quot;)&lt;br /&gt;
    return&lt;br /&gt;
  except ValueError:&lt;br /&gt;
    with open(&amp;#039;hn.out&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
      f.write(&amp;quot;Date de intrare invalide!&amp;quot;)&lt;br /&gt;
    return&lt;br /&gt;
  &lt;br /&gt;
  # Validarea datelor de intrare&lt;br /&gt;
  if not validate_input(N):&lt;br /&gt;
    return&lt;br /&gt;
&lt;br /&gt;
  # Calcularea fractiei armonice si simplificarea ei&lt;br /&gt;
  numerator, denominator = calculate_harmonic_fraction(N)&lt;br /&gt;
  numerator, denominator = simplify_fraction(numerator, denominator)&lt;br /&gt;
&lt;br /&gt;
  # Scrierea rezultatului in fisierul de iesire&lt;br /&gt;
  with open(&amp;#039;hn.out&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
    f.write(str(numerator) + &amp;#039;\n&amp;#039;)&lt;br /&gt;
    f.write(str(denominator))&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
</feed>