3930 - Perioada1

From Bitnami MediaWiki

Enunt[edit | edit source]

Fie N un număr natural cu proprietatea că (N, 10) = 1. Să se determine lungimea perioada T a fracţiei zecimale periodice simple 1N

Cerința[edit | edit source]

Să se scrie un program care citeşte numărul natural N şi determină numărul T cu semnificaţia de mai sus.

Date de intrare[edit | edit source]

Fişierul de intrare perioada1in.txt conţine pe prima linie numărul natural N.

Date de ieșire[edit | edit source]

Fişierul de ieşire perioada1out.txt va conţine pe prima linie numărul T cu semnificaţia de mai sus.

Restricții și precizări[edit | edit source]

  • 1 ⩽ N ⩽ 1012
  • N şi 10 prime între ele

Exemplu 1[edit | edit source]

perioada1in.txt
3
perioada1out.txt
1

Exemplu 2[edit | edit source]

perioada1in.txt
21
perioada1out.txt
6

Exemplu 3[edit | edit source]

perioada1in.txt
31
perioada1out.txt
15

Exemplu 4[edit | edit source]

perioada1in.txt
363
perioada1out.txt
22

Exemplu 5[edit | edit source]

perioada1in.txt
0
perioada1out.txt
Numărul N nu respectă restricțiile impuse.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 3930 - Perioada1

def find_period(N):

   remainder = 1 % N
   seen_remainders = set()
   position = 0
   while remainder not in seen_remainders:
       seen_remainders.add(remainder)
       position += 1
       remainder = (remainder * 10) % N
   return position

def main(input_file, output_file):

   try:
       with open(input_file, 'r') as file:
           N = int(file.readline().strip())
           if 1 <= N <= 10**12 and N % 10 != 0:
               T = find_period(N)
               with open(output_file, 'w') as output:
                   output.write(str(T) + '\n')
           else:
               print("Numărul N nu respectă restricțiile impuse.")
   except Exception as e:
       print(f"Nu au fost respectate cerințele impuse: {str(e)}")

if __name__ == "__main__":

   main("perioada1in.txt", "perioada1out.txt")

</syntaxhighlight>