/// <summary>
 /// Instancia um novo objecto do tipo <see cref="QuadraticFieldSieve{NumberType}"/>.
 /// </summary>
 /// <param name="integerSquareRootAlgorithm">
 /// O objecto responsável pelo cálculo da parte inteira da raiz quadrada de um número.
 /// </param>
 /// <param name="modularFieldFactory">
 /// A fábrica responsável pela criação de objectos capazes de efectuar operações modulares.
 /// </param>
 /// <param name="primesIteratorFactory">
 /// A fábrica responsável pela criação de enumeradores para números primos.
 /// </param>
 /// <param name="integerNumber">O objecto responsável pelas operações sobre os números inteiros.</param>
 /// <exception cref="ArgumentNullException">
 /// Se pelo menos um dos argumentos for nulo.
 /// </exception>
 public QuadraticFieldSieve(
     IAlgorithm <NumberType, NumberType> integerSquareRootAlgorithm,
     IModularFieldFactory <NumberType> modularFieldFactory,
     IPrimeNumberIteratorFactory <int> primesIteratorFactory,
     IIntegerNumber <NumberType> integerNumber)
 {
     if (integerNumber == null)
     {
         throw new ArgumentNullException("integerNumber");
     }
     else if (primesIteratorFactory == null)
     {
         throw new ArgumentNullException("primesIteratorFactory");
     }
     else if (modularFieldFactory == null)
     {
         throw new ArgumentNullException("modularFieldFactory");
     }
     else if (integerSquareRootAlgorithm == null)
     {
         throw new ArgumentNullException("integerSquareRootAlgorithm");
     }
     else
     {
         this.integerNumber       = integerNumber;
         this.modularFieldFactory = modularFieldFactory;
         this.field = new ModularIntegerField(2);
         this.linearSystemAlgorithm = new DenseCondensationLinSysAlgorithm <int>(
             this.field);
         this.primesIteratorFactory      = primesIteratorFactory;
         this.integerSquareRootAlgorithm = integerSquareRootAlgorithm;
     }
 }
Exemple #2
0
 /// <summary>
 /// Instancia um novo objecto do tipo <see cref="FieldDrivenExpressionReader{ObjectType, InputType}"/>.
 /// </summary>
 /// <param name="objectParser">O leitor de objectos.</param>
 /// <param name="field">O corpo.</param>
 /// <param name="integerNumber">O número inteiro.</param>
 public FieldDrivenExpressionReader(
     IParse <ObjectType, string, string> objectParser,
     IField <ObjectType> field,
     IIntegerNumber <ObjectType> integerNumber = null) : base(objectParser, field, integerNumber)
 {
     // A verificação de nulidade do campo é levada a cabo na classe base.
     this.field = field;
 }
 /// <summary>
 /// Instancia uma nova instância da classe que implementa o algoritmo AKS.
 /// </summary>
 public AksPrimalityTest()
 {
     this.perfectPowerTest = new IntPerfectPowerTestAlg(
         new PrimeNumbersIteratorFactory());
     this.integerNumber      = new IntegerDomain();
     this.totientFunctionAlg = new EulerTotFuncAlg <int>(
         new IntegerSquareRootAlgorithm(),
         new PrimeNumbersIteratorFactory(),
         this.integerNumber);
     this.modularFactory = new ModularIntegerFieldFactory();
 }
Exemple #4
0
        /// <summary>
        /// Obtém o valor da aplicação sucessiva da operação soma ao mesmo valor tendo em conta que esta é associativa.
        /// </summary>
        /// <typeparam name="T">O tipo do valor.</typeparam>
        /// <typeparam name="Deg">O tipo que representa o número de vezes a adicionar.</typeparam>
        /// <typeparam name="D">A classe que define a soma.</typeparam>
        /// <param name="val">O valor.</param>
        /// <param name="pow">O expoente.</param>
        /// <param name="monoid">A classe que define a soma sobre o valor.</param>
        /// <param name="degreeIntegerNumber">O objecto responsável pelas operaçóes sobre o grau.</param>
        /// <returns>A potência do valor.</returns>
        /// <exception cref="MathematicsException">
        /// Se o monóide ou o objecto responsável pelas operações sobre inteiros forem nulos ou o expoente
        /// for negativo.
        /// </exception>
        public static T AddPower <T, Deg, D>(
            T val,
            Deg pow,
            D monoid,
            IIntegerNumber <Deg> degreeIntegerNumber)
            where D : IMonoid <T>
        {
            if (monoid == null)
            {
                throw new MathematicsException("Parameter multiplier can't be null.");
            }
            else if (degreeIntegerNumber == null)
            {
                throw new MathematicsException("Parameter degreeIntegerNumber can't be null.");
            }
            else if (degreeIntegerNumber.Compare(pow, degreeIntegerNumber.AdditiveUnity) < 0)
            {
                throw new MathematicsException("Can't computer the powers with negative expoents.");
            }
            else
            {
                var result   = monoid.AdditiveUnity;
                var innerPow = pow;
                var innerVal = val;
                var n        = degreeIntegerNumber.MapFrom(2);
                if (degreeIntegerNumber.Compare(innerPow, degreeIntegerNumber.AdditiveUnity) > 0)
                {
                    var degreeQuotientAndRemainder = degreeIntegerNumber.GetQuotientAndRemainder(
                        innerPow,
                        n);
                    if (degreeIntegerNumber.IsMultiplicativeUnity(degreeQuotientAndRemainder.Remainder))
                    {
                        result = monoid.Add(result, innerVal);
                    }

                    innerPow = degreeIntegerNumber.Multiply(innerPow, n);
                    while (degreeIntegerNumber.Compare(innerPow, degreeIntegerNumber.AdditiveUnity) > 0)
                    {
                        innerVal = monoid.Add(innerVal, innerVal);
                        degreeQuotientAndRemainder = degreeIntegerNumber.GetQuotientAndRemainder(
                            innerPow,
                            n);
                        if (degreeIntegerNumber.IsMultiplicativeUnity(degreeQuotientAndRemainder.Remainder))
                        {
                            result = monoid.Add(result, innerVal);
                        }

                        innerPow = degreeIntegerNumber.Multiply(innerPow, n);
                    }
                }

                return(result);
            }
        }
Exemple #5
0
 /// <summary>
 /// Instancia um novo objecto do tipo <see cref="LegendreJacobiSymbolAlgorithm{NumberType}"/>.
 /// </summary>
 /// <param name="integerNumber">O objecto responsável pelas operações sobre os números inteiros.</param>
 /// <exception cref="ArgumentNullException">
 /// Se o objecto responsável pelas operações sobre os números inteiros for nulo.
 /// </exception>
 public LegendreJacobiSymbolAlgorithm(IIntegerNumber <NumberType> integerNumber)
 {
     if (integerNumber == null)
     {
         throw new ArgumentNullException("integerNumber");
     }
     else
     {
         this.integerNumber = integerNumber;
     }
 }
Exemple #6
0
 /// <summary>
 /// Instancia o objecto responsável pelo cálculo da parte inteira do logaritmo binário de um número.
 /// </summary>
 /// <param name="integerDomain">O objecto responsável pelas operações sobre inteiros.</param>
 /// <exception cref="ArgumentNullException">Se o domínio for nulo.</exception>
 public BaseLogIntegerPart(IIntegerNumber <NumberType> integerDomain)
 {
     if (integerDomain == null)
     {
         throw new ArgumentNullException("integerDomain");
     }
     else
     {
         this.integerDomain = integerDomain;
     }
 }
 /// <summary>
 /// Instancia um novo objecto do tipo <see cref="SquareFreeFractionFactorizationAlg{CoeffType}"/>.
 /// </summary>
 /// <param name="integerNumber">O objecto responsável pelas operações sobre números inteiros.</param>
 /// <exception cref="ArgumentNullException">
 /// Se o argumento for nulo.
 /// </exception>
 public SquareFreeFractionFactorizationAlg(
     IIntegerNumber <CoeffType> integerNumber)
 {
     if (integerNumber == null)
     {
         throw new ArgumentNullException("integerNumber");
     }
     else
     {
         this.integerNumber = integerNumber;
         this.fractionField = new FractionField <CoeffType>(this.integerNumber);
     }
 }
Exemple #8
0
 /// <summary>
 /// Cria uma instância de objectos do tipo <see cref="GeneralDegUnivarPolynomEuclideanDomain{CoeffType, DegreeType}"/>.
 /// </summary>
 /// <param name="variableName">O nome da variável.</param>
 /// <param name="field">O corpo responsável pelas operações sobre os coeficiente.</param>
 /// <param name="integerNumber">O objecto que é responsável pelas operações sobre os graus.</param>
 public GeneralDegUnivarPolynomEuclideanDomain(
     string variableName,
     IField <CoeffType> field,
     IIntegerNumber <DegreeType> integerNumber)
     : base(variableName, field, integerNumber)
 {
     this.field = field;
     this.unit  = new GeneralDegUnivarPolynomNormalForm <CoeffType, DegreeType>(
         this.field.MultiplicativeUnity,
         this.integerNumber.MultiplicativeUnity,
         this.variableName,
         this.field,
         this.integerNumber);
 }
Exemple #9
0
 /// <summary>
 /// Instancia um novo objecto do tipo <see cref="PollardRhoAlgorithm{NumberType}"/>.
 /// </summary>
 /// <param name="testPolynomials">Uma lista de polinómios de teste.</param>
 /// <param name="modularFieldFactory">
 /// A fábrica responsável por objectos capazes de realizarem operações modulares.
 /// </param>
 /// <param name="integerNumber">O objecto respons+avel pelas operações sobre os números inteiros.</param>
 public PollardRhoAlgorithm(
     List <UnivariatePolynomialNormalForm <NumberType> > testPolynomials,
     IModularFieldFactory <NumberType> modularFieldFactory,
     IIntegerNumber <NumberType> integerNumber) : this(modularFieldFactory, integerNumber)
 {
     if (testPolynomials == null || testPolynomials.Count == 0)
     {
         this.SetupPolynomialList();
     }
     else
     {
         this.polynomialsList = new List <UnivariatePolynomialNormalForm <NumberType> >();
         this.polynomialsList.AddRange(testPolynomials);
     }
 }
Exemple #10
0
        /// <summary>
        /// Obtém a potência de um valor.
        /// </summary>
        /// <typeparam name="T">O tipo do valor.</typeparam>
        /// <typeparam name="Deg">O tipo de classe que define os graus.</typeparam>
        /// <typeparam name="D">O tipo da classe que define a multiplicação.</typeparam>
        /// <param name="val">O valor.</param>
        /// <param name="pow">O expoente.</param>
        /// <param name="domain">O domínio responsável pelas operações sobre os valores.</param>
        /// <param name="integerNumber">A classe que define as operações sobre números inteiros.</param>
        /// <returns>A potência do valor.</returns>
        /// <exception cref="MathematicsException">
        /// Se o domínio ou o objecto que define operações sobre os inteiros forem nulos ou o expoente for negativo.
        /// </exception>
        public static T Power <T, Deg, D>(T val, Deg pow, D domain, IIntegerNumber <Deg> integerNumber)
            where D : IMultiplication <T>
        {
            if (integerNumber == null)
            {
                throw new MathematicsException("Parameter integerNumber can't be null.");
            }
            else if (domain == null)
            {
                throw new MathematicsException("Parameter domain can't be null.");
            }
            else if (integerNumber.Compare(pow, integerNumber.AdditiveUnity) < 0)
            {
                throw new MathematicsException("Can't computer the powers with negative expoents.");
            }
            else
            {
                var result   = domain.MultiplicativeUnity;
                var innerPow = pow;
                var innerVal = val;
                var two      = integerNumber.Successor(integerNumber.MultiplicativeUnity);
                if (integerNumber.Compare(innerPow, integerNumber.AdditiveUnity) > 0)
                {
                    var remQuo = integerNumber.GetQuotientAndRemainder(innerPow, two);
                    if (integerNumber.IsMultiplicativeUnity(remQuo.Remainder))
                    {
                        result = domain.Multiply(result, innerVal);
                    }

                    innerPow = remQuo.Quotient;
                    while (integerNumber.Compare(innerPow, integerNumber.AdditiveUnity) > 0)
                    {
                        innerVal = domain.Multiply(innerVal, innerVal);
                        remQuo   = integerNumber.GetQuotientAndRemainder(innerPow, two);
                        if (integerNumber.IsMultiplicativeUnity(remQuo.Remainder))
                        {
                            result = domain.Multiply(result, innerVal);
                        }

                        innerPow = remQuo.Quotient;
                    }
                }

                return(result);
            }
        }
        /// <summary>
        /// Constrói uma instância de um objecto responsável pela factorização de um polinómio
        /// cujos coeficientes são fracções inteiras.
        /// </summary>
        /// <param name="integerNumber">O objecto responsável pelas operações sobre os números inteiros.</param>
        /// <param name="modularSymmetricFactory">
        /// A fábrica responsável pela ciração de instâncias de objectos
        /// responsáveis pelas operações modulares.
        /// </param>
        /// <param name="primeNumbersIteratorFactory">
        /// A fábrica responsável pela criação de um objecto capaz de iterar sobre o conjunto de números
        /// primos limitados por um determinado valor.
        /// </param>
        /// <param name="logarithmAlgorithm">O objecto responsável pelo cálculo do logaritmo.</param>
        /// <exception cref="ArgumentNullException">Se algum dos argumentos for nulo.</exception>
        public IntegerPolynomialFactorizationAlgorithm(
            IIntegerNumber <CoeffType> integerNumber,
            IModularFieldFactory <CoeffType> modularSymmetricFactory,
            IPrimeNumberIteratorFactory <CoeffType> primeNumbersIteratorFactory,
            IAlgorithm <CoeffType, double> logarithmAlgorithm)
        {
            if (integerNumber == null)
            {
                throw new ArgumentNullException("integerNumber");
            }
            else if (modularSymmetricFactory == null)
            {
                throw new ArgumentNullException("modularSymmetricFactory");
            }
            else if (primeNumbersIteratorFactory == null)
            {
                throw new ArgumentNullException("primeNumbersIteratorFactory");
            }
            else if (logarithmAlgorithm == null)
            {
                throw new ArgumentNullException("logarithmAlgorithm");
            }
            else
            {
                this.integerNumber                = integerNumber;
                this.fractionField                = new FractionField <CoeffType>(integerNumber);
                this.modularSymmetricFactory      = modularSymmetricFactory;
                this.squareFreeAlg                = new SquareFreeFractionFactorizationAlg <CoeffType>(integerNumber);
                this.searchFactorizationAlgorithm = new SearchFactorizationAlgorithm <CoeffType>(
                    modularSymmetricFactory,
                    this.integerNumber);
                this.integerSquareRootAlgorithm  = new IntegerSquareRootAlgorithm();
                this.primeNumbersIteratorFactory = primeNumbersIteratorFactory;
                this.logarithmAlgorithm          = logarithmAlgorithm;
                this.resultantAlg = new UnivarPolDeterminantResultantAlg <CoeffType>(
                    this.integerNumber);

                // O algoritmo responsável pelo levantamento módulo uma potência de um número primo.
                this.multiFactorLiftingAlg = new MultiFactorLiftAlgorithm <CoeffType>(
                    new LinearLiftAlgorithm <CoeffType>(
                        modularSymmetricFactory,
                        new UnivarPolEuclideanDomainFactory <CoeffType>(),
                        integerNumber));
            }
        }
 public IntegerBigIntFractionConversion(
     IIntegerNumber <BigInteger> integerNumber,
     BigIntegerToIntegerConversion bigIntegerToIntegerConversion)
 {
     if (integerNumber == null)
     {
         throw new ArgumentNullException("integerNumber");
     }
     else if (bigIntegerToIntegerConversion == null)
     {
         throw new ArgumentNullException("bigIntegerToIntegerConversion");
     }
     else
     {
         this.integerNumber = integerNumber;
         this.bigIntegerToIntegerConversion = bigIntegerToIntegerConversion;
     }
 }
Exemple #13
0
 /// <summary>
 /// Instancia um novo objecto do tipo <see cref="FiniteFieldPolFactorizationAlgorithm{CoeffType}"/>.
 /// </summary>
 /// <param name="linearSystemSolver">
 /// O objecto responsável pela resolução de um sistema de equações lineares.
 /// </param>
 /// <param name="integerNumber">O ojecto responsável pelas operações sobre os números inteiros.</param>
 /// <exception cref="ArgumentNullException">
 /// Se algum dos argumentos for nulo.
 /// </exception>
 public FiniteFieldPolFactorizationAlgorithm(
     IAlgorithm <IMathMatrix <CoeffType>, IMathMatrix <CoeffType>, LinearSystemSolution <CoeffType> > linearSystemSolver,
     IIntegerNumber <CoeffType> integerNumber)
 {
     if (integerNumber == null)
     {
         throw new ArgumentNullException("integerNumber");
     }
     else if (linearSystemSolver == null)
     {
         throw new ArgumentNullException("linearSystemSolver");
     }
     else
     {
         this.integerNumber      = integerNumber;
         this.linearSystemSolver = linearSystemSolver;
     }
 }
 /// <summary>
 /// Instancia um novo objecto do tipo <see cref="SearchFactorizationAlgorithm{CoeffType}"/>.
 /// </summary>
 /// <param name="modularFieldFactory">
 /// A fábrica responsável pela criação de objectos capazes de realizar operações modulares.
 /// </param>
 /// <param name="integerNumber">O objecto responsável pelas operações sobre números inteiros.</param>
 /// <exception cref="ArgumentNullException">
 /// Se algum dos argumentos for nulo.
 /// </exception>
 public SearchFactorizationAlgorithm(
     IModularFieldFactory <CoeffType> modularFieldFactory,
     IIntegerNumber <CoeffType> integerNumber)
 {
     if (integerNumber == null)
     {
         throw new ArgumentNullException("integerNumber");
     }
     else if (modularFieldFactory == null)
     {
         throw new ArgumentNullException("modularFieldFactory");
     }
     else
     {
         this.integerNumber       = integerNumber;
         this.modularFieldFactory = modularFieldFactory;
     }
 }
 /// <summary>
 /// Instancia um novo objecto do tipo <see cref="NaiveIntegerFactorizationAlgorithm{NumberType}"/>.
 /// </summary>
 /// <param name="integerSquareRootAlgorithm">
 /// O algoritmo responsável pela determinação da parte inteira de uma raiz quadrada de um número.
 /// </param>
 /// <param name="integerNumber">O objecto responsável pelas operações sobre os números inteiros.</param>
 /// <exception cref="ArgumentNullException">
 /// Se pelo menos um dos argumentos for nulo.
 /// </exception>
 public NaiveIntegerFactorizationAlgorithm(
     IAlgorithm <NumberType, NumberType> integerSquareRootAlgorithm,
     IIntegerNumber <NumberType> integerNumber)
 {
     if (integerNumber == null)
     {
         throw new ArgumentNullException("integerNumber");
     }
     else if (integerSquareRootAlgorithm == null)
     {
         throw new ArgumentNullException("integerSquareRootAlgorithm");
     }
     else
     {
         this.integerNumber = integerNumber;
         this.integerSquareRootAlgorithm = integerSquareRootAlgorithm;
     }
 }
Exemple #16
0
 /// <summary>
 /// Instancia um objecto do tipo <see cref="ResSolAlgorithm{NumberType}"/>.
 /// </summary>
 /// <param name="modularFieldFactory">
 /// A fábrica responsável pela criação dos objectos responsáveis pelas operações modulares.
 /// </param>
 /// <param name="integerNumber">O objecto responsável pelas operações sobre inteiros.</param>
 /// <exception cref="ArgumentNullException">Se pelo menos um dos argumentos for nulo.</exception>
 public ResSolAlgorithm(
     IModularFieldFactory <NumberType> modularFieldFactory,
     IIntegerNumber <NumberType> integerNumber)
 {
     if (integerNumber == null)
     {
         throw new ArgumentNullException("integerNumber");
     }
     else if (modularFieldFactory == null)
     {
         throw new ArgumentNullException("modularFieldFactory");
     }
     else
     {
         this.integerNumber        = integerNumber;
         this.legendreJacobiSymAlg = new LegendreJacobiSymbolAlgorithm <NumberType>(integerNumber);
         this.modularFieldFactory  = modularFieldFactory;
     }
 }
Exemple #17
0
 /// <summary>
 /// Permite instanciar um leitor de expressões com base num anel numérico.
 /// </summary>
 /// <param name="objectParser">O objecto responsável pela leitura de cada elemento.</param>
 /// <param name="ring">O anel responsável pelas operações sobre os elementos.</param>
 /// <param name="integerNumber">O objecto responsável pelas operações sobre o grau.</param>
 /// <exception cref="MathematicsException">
 /// Se o leitor de objectos ou o anel não forem providenciados.
 /// </exception>
 public RingDrivenExpressionReader(
     IParse <ObjectType, string, string> objectParser,
     IRing <ObjectType> ring,
     IIntegerNumber <ObjectType> integerNumber)
 {
     if (objectParser == null)
     {
         throw new MathematicsException("An objet parser must be provided.");
     }
     else if (ring == null)
     {
         throw new MathematicsException("A ring must be provided.");
     }
     else
     {
         this.objectParser  = objectParser;
         this.ring          = ring;
         this.integerNumber = integerNumber;
     }
 }
Exemple #18
0
 /// <summary>
 /// Permite criar uma instância dum objecto responsável pela obtenção de factores de um número.
 /// </summary>
 /// <param name="modularFieldFactory">O objecto responsável pelas operações modulares.</param>
 /// <param name="integerNumber">O objecto responsável pelas operações sobre números inteiros.</param>
 /// <exception cref="ArgumentNullException">Se pelo menos um dos argumentos for nulo.</exception>
 public PollardRhoAlgorithm(
     IModularFieldFactory <NumberType> modularFieldFactory,
     IIntegerNumber <NumberType> integerNumber)
 {
     if (integerNumber == null)
     {
         throw new ArgumentNullException("integerNumber");
     }
     else if (modularFieldFactory == null)
     {
         throw new ArgumentNullException("modularFieldFactory");
     }
     else
     {
         this.integerNumber       = integerNumber;
         this.modularFieldFactory = modularFieldFactory;
         this.startValue          = this.integerNumber.MapFrom(19);
         this.SetupPolynomialList();
     }
 }
Exemple #19
0
 /// <summary>
 /// Instancia uma novo objecto do tipo <see cref="FieldDrivenExpressionParser{ObjectType}"/>.
 /// </summary>
 /// <param name="elementsParser">O leitor dos valores.</param>
 /// <param name="field">O corpo responsável pelas operações sobre os valores.</param>
 /// <param name="integerNumber">O objecto responsável pelas operações sobre os representantes de inteiros.</param>
 /// <exception cref="ArgumentNullException">Se o leitor dos valores ou o corpo responsável pelas suas operações forem nulos.</exception>
 public FieldDrivenExpressionParser(
     IParse <ObjectType, string, string> elementsParser,
     IField <ObjectType> field,
     IIntegerNumber <ObjectType> integerNumber = null)
 {
     if (field == null)
     {
         throw new ArgumentNullException("field");
     }
     else if (elementsParser == null)
     {
         throw new ArgumentNullException("elementsParser");
     }
     else
     {
         this.expressionReader = new FieldDrivenExpressionReader <ObjectType, ISymbol <string, string>[]>(
             elementsParser,
             field,
             integerNumber);
     }
 }
 /// <summary>
 /// Instancia um novo objecto do tipo <see cref="RingDrivenExpressionParser{ObjectType}"/>.
 /// </summary>
 /// <param name="elementsParser">O leitor de valores.</param>
 /// <param name="ring">O anel responsável pela leitura dos valores.</param>
 /// <param name="integerNumber">O objecto responsável pelas operações sobre representantes de números inteiros.</param>
 public RingDrivenExpressionParser(
     IParse <ObjectType, string, string> elementsParser,
     IRing <ObjectType> ring,
     IIntegerNumber <ObjectType> integerNumber = null)
 {
     if (ring == null)
     {
         throw new ArgumentNullException("ring");
     }
     else if (elementsParser == null)
     {
         throw new ArgumentNullException("elementsParser");
     }
     else
     {
         this.expressionReader = new RingDrivenExpressionReader <ObjectType, ISymbol <string, string>[]>(
             elementsParser,
             ring,
             integerNumber);
     }
 }
Exemple #21
0
 /// <summary>
 /// Cria uma instância de objectos do tipo <see cref="GeneralDegUnivarPolynomRing{CoeffType, DegreeType}"/>.
 /// </summary>
 /// <param name="variableName">O nome da variável.</param>
 /// <param name="ring">O anel responsável pelas operações sobre os coeficientes.</param>
 /// <param name="integerNumber">O objecto responsável pelas operações sobre os graus.</param>
 /// <exception cref="ArgumentNullException">
 /// Se algum dos argumentos form nulo.
 /// </exception>
 /// <exception cref="ArgumentException">Se a variável for vazia.</exception>
 public GeneralDegUnivarPolynomRing(
     string variableName,
     IRing <CoeffType> ring,
     IIntegerNumber <DegreeType> integerNumber)
 {
     if (integerNumber == null)
     {
         throw new ArgumentNullException("integerNumber");
     }
     else if (ring == null)
     {
         throw new ArgumentNullException("ring");
     }
     else if (string.IsNullOrWhiteSpace(variableName))
     {
         throw new ArgumentException("Variable must not be empty.");
     }
     else
     {
         this.variableName = variableName;
         this.ring         = ring;
     }
 }
Exemple #22
0
 /// <summary>
 /// Obtém uma instância do algorimo orientado para o cálculo da função totient.
 /// </summary>
 /// <param name="squareRootAlgorithm">O algoritmo responsável pela extracção de raízes quadradas.</param>
 /// <param name="primeNumberFactory">
 /// A fábrica responsável pela instanciação de um iterador para números
 /// primos.
 /// </param>
 /// <param name="integerNumber">O objecto responsável pelas operações sobre inteiros.</param>
 /// <exception cref="ArgumentNullException">Se pelo menos um dos argumentos for nulo.</exception>
 public EulerTotFuncAlg(
     IAlgorithm <NumberType, NumberType> squareRootAlgorithm,
     IPrimeNumberIteratorFactory <NumberType> primeNumberFactory,
     IIntegerNumber <NumberType> integerNumber)
 {
     if (integerNumber == null)
     {
         throw new ArgumentNullException("integerNumber");
     }
     else if (primeNumberFactory == null)
     {
         throw new ArgumentNullException("primeNumberFactory");
     }
     else if (squareRootAlgorithm == null)
     {
         throw new ArgumentNullException("squareNumberAlgorithm");
     }
     else
     {
         this.integerNumber       = integerNumber;
         this.primeNumberFactory  = primeNumberFactory;
         this.squareRootAlgorithm = squareRootAlgorithm;
     }
 }
 /// <summary>
 /// Instancia um novo objecto do tipo <see cref="LinearLiftAlgorithm{T}"/>.
 /// </summary>
 /// <param name="modularFieldFactory">
 /// A fábrica responsável pela criação de objectos capazes de realizar operações modulares.
 /// </param>
 /// <param name="polynomialDomainFactory">
 /// A fábrica responsável pela criação de domínios capazes de realizar operações sobre polinómios.
 /// </param>
 /// <param name="integerNumber">A classe responsável pelas operações sobre os inteiros.</param>
 /// <exception cref="ArgumentNullException">
 /// Se algum dos argumentos for nulo.
 /// </exception>
 public LinearLiftAlgorithm(
     IModularFieldFactory <T> modularFieldFactory,
     IUnivarPolDomainFactory <T> polynomialDomainFactory,
     IIntegerNumber <T> integerNumber)
 {
     if (integerNumber == null)
     {
         throw new ArgumentNullException("integerNumber");
     }
     else if (polynomialDomainFactory == null)
     {
         throw new ArgumentNullException("polynomialDomainFactory");
     }
     else if (modularFieldFactory == null)
     {
         throw new ArgumentNullException("modularFieldFactory");
     }
     else
     {
         this.integerNumber           = integerNumber;
         this.modularFieldFactory     = modularFieldFactory;
         this.polynomialDomainFactory = polynomialDomainFactory;
     }
 }