001/* 002 * $Id: GreatestCommonDivisor.java 4820 2014-04-21 07:59:48Z kredel $ 003 */ 004 005package edu.jas.fd; 006 007 008import java.io.Serializable; 009import java.util.List; 010 011import edu.jas.poly.GenSolvablePolynomial; 012import edu.jas.structure.GcdRingElem; 013 014 015/** 016 * (Non-unique) factorization domain greatest common divisor algorithm 017 * interface. 018 * @param <C> coefficient type 019 * @author Heinz Kredel 020 */ 021 022public interface GreatestCommonDivisor<C extends GcdRingElem<C>> extends Serializable { 023 024 025 /** 026 * GenSolvablePolynomial left greatest common divisor. 027 * @param P GenSolvablePolynomial. 028 * @param S GenSolvablePolynomial. 029 * @return gcd(P,S) with P = P'*gcd(P,S)*p and S = S'*gcd(P,S)*s, where 030 * deg_main(p) = deg_main(s) == 0. 031 */ 032 public GenSolvablePolynomial<C> leftGcd(GenSolvablePolynomial<C> P, GenSolvablePolynomial<C> S); 033 034 035 /** 036 * GenSolvablePolynomial right greatest common divisor. 037 * @param P GenSolvablePolynomial. 038 * @param S GenSolvablePolynomial. 039 * @return gcd(P,S) with P = p*gcd(P,S)*P' and S = s*gcd(P,S)*S', where 040 * deg_main(p) = deg_main(s) == 0. 041 */ 042 public GenSolvablePolynomial<C> rightGcd(GenSolvablePolynomial<C> P, GenSolvablePolynomial<C> S); 043 044 045 /** 046 * GenSolvablePolynomial left least common multiple. 047 * @param P GenSolvablePolynomial. 048 * @param S GenSolvablePolynomial. 049 * @return lcm(P,S) with lcm(P,S) = P'*P = S'*S. 050 */ 051 public GenSolvablePolynomial<C> leftLcm(GenSolvablePolynomial<C> P, GenSolvablePolynomial<C> S); 052 053 054 /** 055 * GenSolvablePolynomial right least common multiple. 056 * @param P GenSolvablePolynomial. 057 * @param S GenSolvablePolynomial. 058 * @return lcm(P,S) with lcm(P,S) = P*P' = S*S'. 059 */ 060 public GenSolvablePolynomial<C> rightLcm(GenSolvablePolynomial<C> P, GenSolvablePolynomial<C> S); 061 062 063 /** 064 * GenSolvablePolynomial right content. 065 * @param P GenSolvablePolynomial. 066 * @return cont(P) with pp(P)*cont(P) = P. 067 */ 068 public GenSolvablePolynomial<C> rightContent(GenSolvablePolynomial<C> P); 069 070 071 /** 072 * GenSolvablePolynomial right primitive part. 073 * @param P GenSolvablePolynomial. 074 * @return pp(P) with pp(P)*cont(P) = P. 075 */ 076 public GenSolvablePolynomial<C> rightPrimitivePart(GenSolvablePolynomial<C> P); 077 078 079 /** 080 * GenSolvablePolynomial left content. 081 * @param P GenSolvablePolynomial. 082 * @return cont(P) with cont(P)*pp(P) = P. 083 */ 084 public GenSolvablePolynomial<C> leftContent(GenSolvablePolynomial<C> P); 085 086 087 /** 088 * GenSolvablePolynomial left primitive part. 089 * @param P GenSolvablePolynomial. 090 * @return pp(P) with cont(P)*pp(P) = P. 091 */ 092 public GenSolvablePolynomial<C> leftPrimitivePart(GenSolvablePolynomial<C> P); 093 094 095 /** 096 * GenSolvablePolynomial left co-prime list. 097 * @param A list of GenSolvablePolynomials. 098 * @return B with leftGcd(b,c) = 1 for all b != c in B and for all 099 * non-constant a in A there exists b in B with b|a. B does not 100 * contain zero or constant polynomials. 101 */ 102 public List<GenSolvablePolynomial<C>> leftCoPrime(List<GenSolvablePolynomial<C>> A); 103 104 105 /** 106 * GenSolvablePolynomial test for left co-prime list. 107 * @param A list of GenSolvablePolynomials. 108 * @return true if leftGcd(b,c) = 1 for all b != c in B, else false. 109 */ 110 public boolean isLeftCoPrime(List<GenSolvablePolynomial<C>> A); 111 112}