# -*- coding: iso-8859-2 -*- from sys import stdin, exit from re import split as re_split def gcd(x,y): if y==0: return x return gcd(y,x%y) def parsen(cislo): if len(cislo) > 100: raise Exception if '-' in cislo: raise Exception kusy = re_split("[*. ]+",cislo) result = 1 nonempty = False for kus in kusy: kus = kus.strip() if len(kus)==0: continue nonempty = True k2 = kus.split('^') if len(k2)>2: raise Exception if len(k2)==2: a, b = int(k2[0]), int(k2[1]) if b>100: raise Exception # na vstupu nechceme vyssi mocniny if a==0 and b==0: raise Exception result *= a**b if len(k2)==1: result *= int(kus) if not nonempty: raise Exception return result def parsez(zlomok): if len(zlomok) > 100: raise Exception casti = zlomok.split('/') if len(casti) > 2: raise Exception if len(casti) == 1: x,y = parsen(casti[0]), 1 else: x,y = parsen(casti[0]), parsen(casti[1]) if x==0 or y==0: raise Exception d = gcd(x,y) if d>1: print "Upozornění: zlomek '"+zlomok.strip()+"' není je v základním tvaru." return (x/d,y/d) def factors(a): if a==0: return [0] primes = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47] result = "" for p in primes: if a%p==0: x=0 while a%p==0: x+=1;a/=p result += " "+str(p) if x>1: result += "^"+str(x) if a>1: result += " "+str(a) return result[1:] # main: try: A = parsen( stdin.readline() ) except: print "Nepodařilo se načíst nebo pochopit vstupní hodnotu." exit(1) zlomky = [] for line in stdin.readlines(): line = line.strip() if line == "": continue nove_zlomky = line.split(',') for i in range(len(nove_zlomky)): try: nove_zlomky[i] = parsez( nove_zlomky[i] ) except: print "Nepodařilo se pochopit zlomek: '" + nove_zlomky[i].strip() + "'" exit(1) zlomky += nove_zlomky print "Výpočet:" print A,"=",factors(A) for step in range(1000): spravil = False for c,d in zlomky: if A%d==0: A = (A*c)/d spravil = True break if not spravil: print "Konec." exit(0) print A,"=",factors(A) if (A > 10**1000): print "Příliš velká aktuální hodnota." exit(1) print "Program ani po 1000 krocích neskončil." exit(1)