All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.psjava.math.ns.ModularNumberSystem Maven / Gradle / Ivy

package org.psjava.math.ns;

import org.psjava.math.Modulo;

public class ModularNumberSystem implements MultipliableNumberSystem {
	
	private final IntegerDivisableNumberSystem ns;
	private final T m;
	
	public ModularNumberSystem(IntegerDivisableNumberSystem originalSystem, T modular) {
		this.ns = originalSystem;
		this.m = modular;
	}

	@Override
	public T getZero() {
		return ns.getZero();
	}
	
	@Override
	public T getOne() {
		return ns.getOne();
	}
	
	@Override
	public boolean isOne(T v) {
		return ns.isOne(modulo(v));
	}
	
	@Override
	public boolean isPositive(T v) {
		return ns.isPositive(modulo(v));
	}
	
	@Override
	public boolean isNegative(T v) {
		return false;
	}
	
	@Override
	public boolean isZero(T v) {
		return ns.isZero(modulo(v));
	}
	
	@Override
	public int getSign(T v) {
		return ns.getSign(modulo(v));
	}
	
	@Override
	public boolean areEqual(T v1, T v2) {
		return ns.areEqual(modulo(v1), modulo(v2));
	}
	
	@Override
	public T add(T v1, T v2) {
		return modulo(ns.add(v1, v2));
	}
	
	@Override
	public T subtract(T minuend, T subtrahend) {
		return modulo(ns.subtract(minuend, subtrahend));
	}
	
	@Override
	public T multiply(T v1, T v2) {
		return modulo(ns.multiply(v1, v2));
	}

	private T modulo(T v) {
		return Modulo.calc(ns, v, m);
	}
	
	@Override
	public int compare(T o1, T o2) {
		return ns.compare(modulo(o1), modulo(o2));
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy