გვჭირდება რიცხვითი პროცედურა,
რომელიც ერთი მიმართულებით მარტივია, მეორე მიმართულებით კი რთული.
ამას მივყავართ მოდულურ არითემტიკამდე,
რომელიც ასევე ცნობილია როგორც საათის არითმეტიკა.
მაგალითად, 46 mod 12-ის საპოვნელად
შეგვიძლია ავიღოთ თოკი სიგრძით 46 ერთეული
და შემოვახვიოთ 12 ერთეულიან საათს,
რომელსაც მოდული ეწოდება,
ხოლო სადაც დასრულდება თოკი, ის იქნება ამონახსნი.
ვამბობთ, რომ 46 mod 12 კონგრუენტულია ათთან. მარტივია.
ახლა იმისთვის რომ ამან იმუშაოს, გამოვიყენოთ მარტივი მოდული,
მაგალითად 17. შემდეგ, ვიპოვოთ 17-ის პრიმიტიული ფესვი,
ამ შემთხვევაში სამი, რომელსაც აქვს მნიშვნელოვანი თვისება:
როცა ავიყვანთ განსხვავებულ ხარისხებში,
ამონახსნები უნიკალურად გადანაწილდება საათზე.
სამი ცნობილია როგორც გენერატორი.
თუ სამს რაიმე x ხარისხში ავიყვანთ,
მაშინ ამონახსნი დიდი ალბათობით იქნება რომელიმე მთელი რიცხვი ნულსა და 17-ს შორის.
ამ პროცესის შებრუნება რთულია.
ვთქვათ, მოცემულია 12. იპოვეთ ხარისხი,
რომელშიც უნდა ავიყვანოთ სამი.
ამას ეწოდება დისკრეტული ლოგარითმის პრობლემა.
უკვე გვაქვს ცალმხრივი ფუნქცია,
რომლის შესრულება მარტივია, შებრუნება კი რთული.
თუ მოცემულია 12, რამდენიმე ცდა მოგვიწევს შესაბამისი ხარისხების საპოვნელად.
რამდენად რთულია ეს?
მცირე რიცხვებისთვის ეს მარტივია,
მაგრამ მარტივ მოდულს თუ გამოვიყენებთ,
რომელიც ასობით სიმბოლოსგან შედგება,
ამოხსნა ძალიან არაპრაქტიკული ხდება.
მთელ დედამიწაზე არსებულ კომპიუტერებზეც რომ მიგვიწვდებოდეს ხელი,
შესაძლოა ათასობით წელი იყოს საჭირო ყველა შესაძლო ვარიანტის შესამოწმებლად.
ასე რომ, ცალმხრივი ფუნქციის სიძლიერე
დამოკიდებულია იმაზე, თუ რა დროა საჭირო მის შესაბრუნებლად.