aurora-opensource / au

A C++14-compatible physical units library with no dependencies and a single-file delivery option. Emphasis on safety, accessibility, performance, and developer experience.
Apache License 2.0
329 stars 21 forks source link

Weaken `find_first_factor` contract to any prime #325

Closed chiphogg closed 1 week ago

chiphogg commented 1 week ago

It turns out, none of our use cases require us to find the first factor. All we really need is to find any prime factor. (And if the number itself is prime, of course, then the only option will be to return the number itself.)

Weakening this contract enables us to take advantage of faster factoring methods that aren't guaranteed to find the smallest factor. Obviously, we could use these faster methods to build a function that satisfies our old contract, by repeatedly applying them to fully factor a number, and then taking the smallest one. But this adds extra computation for no clear benefit.

Helps #217.