3930 - Perioada1

De la Universitas MediaWiki

Enunt

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

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

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

Date de ieșire

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

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

Exemplu 1

perioada1in.txt
3
perioada1out.txt
1

Exemplu 2

perioada1in.txt
21
perioada1out.txt
6

Exemplu 3

perioada1in.txt
31
perioada1out.txt
15

Exemplu 4

perioada1in.txt
363
perioada1out.txt
22

Exemplu 5

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

Rezolvare

#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")