A mathematical characterization of the difficulty of a mathematical problem which describes the resources required by a computing machine to solve the problem. The mathematical study of such characterizations is called computational complexity theory and is important in many branches of theoretical computer science, especially cryptography.