nilsso / acm-cpp

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Arithmetical Congruence Monoid C++

Note that I've restarted this project in Rust (because I felt like it.)

This project serves as a C++ implementation and extension of the acm-sage project and was started as an undergraduate research project.

Requirements

Building the project requires only a few packages:

  • the cmake build tool
  • a C++ compiler with C++17 support (trying to keep things modern)

Install these via your favorite package manager.

Installation

First clone and move into the project (using --recurse-submodules to also clone googletests into test/lib/googletest):

git clone --recurse-submodules https://github.com/nilsso/acm-cpp
cd acm-cpp

Then either:

  • Build manually with:
    mkdir build
    cd build
    cmake ..
    make install
    
  • Run the helper script ./run.sh which build and installs all, like above, and then also runs all tests.

Usage

Through the test program we can try out the functionality of the acm library:

Within the Hilbert monoid, we can find the divisors of and factorize 441, as well as generate irreducible elements less than 100 (starting at 1):

./acm-main -H -d 441
# > (1,9,21,49,441)

./acm-main -H -f 441
# > ((9,49),(21,21))

./acm-main -H -n 100
# > (1,5,9,13,17,21,29,33,37,41,49,53,57,61,69,73,77,89,93,97)

About

License:MIT License


Languages

Language:C++ 77.3%Language:Shell 11.9%Language:CMake 10.8%