Search code examples
c++cmathequation-solving

Solving equation. Counting (x,y)


I'm having a trouble with my math:

Assume that we have a function: F(x,y) = P; And my question is: what would be the most efficient way of counting up suitable (x,y) plots for this function ? It means that I don't need the coordinates themself, but I need a number of them. P is in a range: [0 ; 10^14]. "x" and "y" are integers. Is it solved using bruteforce or there are some advanced tricks(math / programming language(C,C++)) to solve this fast enough ?

To be more concrete, the function is: x*y - ((x+y)/2) + 1.


Solution

  • x*y - ((x+y)/2) + 1 == P is equivalent to (2x-1)(2y-1) == (4P-3).

    So, you're basically looking for the number of factorizations of 4P-3. How to factor a number in C or C++ is probably a different question, but each factorization yields a solution to the original equation. [Edit: in fact two solutions, since if A*B == C then of course (-A)*(-B) == C also].

    As far as the programming languages C and C++ are concerned, just make sure you use a type that's big enough to contain 4 * 10^14. int won't do, so try long long.