Add solver for linear Diophantine equations#159
Open
xavierleroy wants to merge 1 commit intoocaml:masterfrom
Open
Add solver for linear Diophantine equations#159xavierleroy wants to merge 1 commit intoocaml:masterfrom
xavierleroy wants to merge 1 commit intoocaml:masterfrom
Conversation
Solves linear Diophantine equations of one variable. Generalization of the Chinese remainder theorem.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR adds
Z.solve_linear_congruences, a solver for linear Diophantine equations of one variable:This includes the Chinese remainder theorem as a special case (with aᵢ = 1).
I wrote this code several times in the past, once to implement RSA in Cryptokit, the other times for programming / mathematical puzzles such as the Euler project. The interface and implementation in this PR is taken from https://github.com/gmevel/euler-lib , which uses OCaml's plain
intinstead of arbitrary-precision integers.Maybe this function is too specialized for a library such as Zarith. On the other hand, it's nontrivial code that nicely complements the existing number-theoretic functions of Zarith.