Zkouška C++ 1. 6. 2026
Najděte všechny kořeny polynomu nad modulární aritmetikou (komutativním okruhem) , kde , definovanou (zde pomocí C++ operátorů) jako:
Číslo a tudíž i výsledky operátorů a budou vždy reprezentovatelné typem std::uint_fast32_t, pro výpočet násobení, sčítání i následného modulo je však nutné použít std::uint_fast64_t.
Číslo (decimálně) a polynom jsou zadány na první řádce standardního vstupu, odděleny bílými znaky.
Polynom je zadán jako libovolný výraz obsahující:
proměnnou
decimální konstanty v rozsahu
symboly
+a*reprezentující azávorky
Symbol * má vyšší prioritu než +, podobně jako v C++.
Například tento vstup:
1001 5+x*(3+2*x*(2+x))
specifikuje polynom nad .
Předpokládá se hledání kořenů hrubou silou, tedy vyhodnocením zadaného polynomu pro všechna .
Hledání hrubou silou vyžaduje efektivní reprezentaci polynomu; např. opakovanou analýzu textového vstupu pro každé nelze stihnout v zadaných časových mezích pro velká . Není však nezbytně nutné konvertovat výraz do kanonického tvaru polynomu, vhodná reprezentace původního výrazu může být dostatečně rychlá.
Program vypíše (na standardní výstup) kořeny v rostoucím pořadí, každý na zvláštní řádce a opatřený prefixem x=. Na závěr vypíše celkový počet kořenů opatřený prefixem n=.
Pro vstup z příkladu výše je očekávaný výstup tento:
x=393 x=939 n=2