-
Notifications
You must be signed in to change notification settings - Fork 148
Implement more number theory functions #202
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
It would be great! |
I'd like to see these implemented as generics over ring/field traits. Especially with specialization coming soon (or has it landed?), this is really the right way to go. |
Could you give a really quick example, to illustrate what you're picturing? |
Along the lines of a numeric tower (read up on Haskell's if you're curious) - except, I have no intention of trying to do a full numeric tower because no one seems to be able to get that right. All I'm thinking for now is - define traits for Group, Ring, Field, etc. so we have a place to stick generic algorithms. I tend to think we shouldn't even have the various traits inherit from each other, at least for now - BigUint can always inherit from each of Group/Ring/whatever. Basically keep it as simple as possible for now - nothing more than a place to stick things that should work on anything that's a group/ring/field. gcd(), lcm()... perhaps a few others should then become generic functions on whatever the appropriate trait is, with specializations where it matters for performance. |
I think that having additional structures defined using typenum would feel more "natural". |
I understand the high-level picture of what you're looking for, @koverstreet . A set of composable traits that can be included and maybe specialized for each type. So starting small for now with jsut a "ring" trait that implements all sorts of modular arithmetic functions on this -- what's the correct way to implement this? I wouldn't call myself a rust expert yet so I need some guidance. The following is what my mind jumps to, but this obviously doesn't compile because you can't implement a trait in terms of another trait -- you need a concrete type. But if we implement this trait for all the primitive types explicitly, that defeats the point of composition of these traits, doesn't it?
We could implement these as standalone template functions: But again that kind of defeats the point. So how should this be done? |
I implemented all of these some time ago here. |
This issue was moved to rust-num/num-integer#3 |
In num_integer, I see an implementation of gcd.
I would like to implement some related number theory functions: modular exponentiation, extended euclid's algorithm, modular multiplicative inverse.
I'm also interested in prime factorization, euler's totient function, primitive roots, etc, but these might be too much.
Is there an interest for these functions in this library, to go alongside gcd? I'd be happy to implement the functions, tests, documentation, etc, I just want to make sure there's interest from the maintainers before I begin.
The text was updated successfully, but these errors were encountered: