tvl-depot/assessments/semiprimes
William Carroll ee96a818e1 Define Server.semiprime
- Clear the boilerplate that `mix` generated
- Consume `Math.factor` to test which inputs are semiprimes
- Cache all inputs that are semiprimes as soon as we discover that they are
- semiprimes

I considered a couple things related to the Cache:
- Could save space by storing all semiprime factors in a tree. This would make
  the lookups more expensive. Also because the tree's depth would never exceed
  two (because all semiprimes only have two factors), the tree would be quite
  broad, and we may not be saving enough space for the trade to be worthwhile. I
  might be wrong about that though.
- We could consider pre-computing all semiprimes when we start the app, but
  without running some tests firsts, I'm not sure whether or not it's worth the
  trouble.
2020-12-12 01:32:31 +00:00
..
server Define Server.semiprime 2020-12-12 01:32:31 +00:00
default.nix Define stubbed default.nix 2020-12-11 22:43:53 +00:00
README.md Initialize the Semiprimes Service 2020-12-11 18:52:35 +00:00

Semiprimes Service

Introduction

A composite is a number containing at least two prime factors. For example:

15 = 3 × 5
9 = 3 × 3
12 = 2 × 2 × 3

There are ten composites below thirty containing precisely two, not necessarily distinct, prime factors: 4, 6, 9, 10, 14, 15, 21, 22, 25, 26. Lets call such numbers Semiprimes.

Task

  • Write a module which provides a function to tell whether a given number, N, is a semiprime. N will be 10^5.
  • Please implement an API (RESTful or GraphQL) to factor a given number into two prime numbers if its a semiprime, otherwise, return an error message.

Stretch Goals

  • Handle the invalid inputs.
  • Support batch requests: i.e. users could provide 100 numbers, and the API return the answer for all.
  • Considering this module will be used by a long running service, could you optimize it to give answers faster?