Operações com Números Inteiros 1. Operações Aritméticas no Maple V As operações aritméticas no Maple V são definidas de acordo com as convenções matemáticas padrão. O Maple V é um programa interativo que permite realizar de maneira simples uma grande variedade de operações matemáticas. Também possui outras propriedades que o transformam em um programa extremamente complexo e aplicável a um amplo âmbito de matérias, desde matemática mais teórica à mais aplicada. Uma das primeiras aplicações do Maple V é seu uso para a realização de operações aritméticas, como se fosse uma calculadora convencional, porém com uma importante diferença: a precisão de seus cálculos. Pode realizar as operações de forma exata, sendo o próprio usuário quem especifica o grau de precisão que deseja. Esta precisão ilimitada é a característica que diferencia o Maple V de outros programas de cálculo numérico, onde a longitude de palavra com a qual trabalha o ordenador, determina a precisão, sendo assim se converte em algo inerente ao hardware e não modificável. esta contribuição é uma das mais importantes do cálculo simbólico. O Maple V assume as operações aritméticas habituais de soma, diferença, produto, divisão e potência, com a hierarquia habitual entre elas x+y Soma x-y Diferença x*y Produto x/y Divisão x^y ou x**y Potência x! Fatorial Para somar dois números, digite simplesmente o primeiro número, um sinal de mais (+) e o segundo número. Pode incluir tranqüilamente espaços antes e depois do sinal de mais, para que o input seja mais legível. > 53+78; Como na maioria das linguagens, o produto de a vezes c, se escreve como a*c. > 127*9721; Diferentemente de uma calculadora, quando trabalha com inteiros, o Maple V mostra o resultado exato mesmo quando tem mais dígitos que os que caberiam em uma linha da tela. O MapleV devolve o número exato de 34^56. > 34^56; Estas operações são utilizadas para realizar cálculos mais ou menos complexos com o Maple V. Ao combinar várias operações em uma mesma instrução, deve se levar em conta os critérios de prioridade habitais entre elas, que determinam a ordem de avaliação da operação. Veja o seguinte exemplo: > 2*3^2+(5-2)*3; Levando em conta a prioridade dos operadores, o primeiro a ser avaliado é o de potenciação. A ordem de avaliação normal pode se alterar agrupando expressões entre parênteses. Além destes operadores aritméticos, o Maple V é dotado de um conjunto de funções básicas, e o usuário pode definir também suas próprias funções. Tanto os operadores como as funções que leva incorporadas o Maple V, podem ser aplicadas sobre constantes simbólicas ou números. Exercício 1. Realizar as seguintes operações: a) (-2+3-5)(4-3+2):(15+4-21) 3 b) 2 − 3 ( 4 − 3 + 5 ) [(3-2)+(6-8-5)] c) 5-[4-3+2x7+5]+[ ( 3 − 6 ) 2 ( 7 − 9) 2 ] d) 6-4x3:2-7x2+8-6:3- 52 +3 e) [5+3x2:6-4].[4:2-3+6]:[7-8:2-2]^2 Colocamos no Maple V as operações anteriores da seguinte maneira: > ((-2+3-5)*(4-3+2))/(15+4-21); > ((2-3)*(4-3+5))^3*(3-2+6-8-5); > 5-(4-3+2*7+5)+(3-6)^2*(7-9)^2; > 6-(4*3)/2-7*2+8-6/3-5^2+3; > ((5+(3*2)/6-4)*(4/2-3+6))/(7-8/2-2)^2; Exercício 2. Realizar as seguintes operações: 1) −6ab + 3a 2 + 2ab 2) 6a 2 + 2a − b 2 + 3a − 5a 2 + b 2 3) 6ab − 2a 2 − 4ab + 3a 2 Colocamos no Maple V as operações anteriores da seguinte maneira: > 6*a*b+3*a^2+2*a*b; > 6*a^2+2*a-b^2+3*a-5*a^2+b^2; > 6*a*b-2*a^2-4*a*b+3*a^2; A finalidade deste exercício é deixar clara a facilidade do Maple para a simplificação direta de expressões simples. Exercício 3. Sendo H = 3 a^2 - 2a + 7, F = 6 a^3 - 5a +2 e G = 5 a^2 + 4a-3, Calcular: 1) H + F + G 2) H - F + G 3) H - F - G Colocamos no Maple V as operações anteriores da seguinte maneira: > H:=3*a^2-2*a+7;F:=6*a^3-5*a+2;G:=5*a^2+4*a-3; > H+F+G; > H-F+G; > H-F-G; 2. Números Inteiros O programa do Maple V pode trabalhar em diferentes plataformas. Dependendo da potência de software e hardware das mesmas, o programa trabalha-rá com mais ou menos precisão. Esta precisão com a qual o Maple V trabalha faz que não exista nenhuma limitação quanto ao tamanho máximo de números inteiros que é capaz de trabalhar; a limitação mais típica é a disponibilidade de memória do ordenador com que se trabalha. Sendo assim, todas as operações usuais com números inteiros se realizam de forma exata, independentemente do tamanho que tenha o resultado. O limite é de aproximadamente 500.000 dígitos. Por exemplo: > 7^400; Caso queiramos saber o número de dígitos de um resultado tão grande como o anterior, utilizamos o comando lenght, cuja síntese é: Lentgh(inteiro) Devolve o número de dígitos do inteiro aso o aplicamos na saída anterior, teremos: > length(""); 3. Funções mais Comuns com Argumento Inteiro As funções com argumento inteiro que se apresentarão na continuação se classificarão em dois grupos. O primeiro é possível de ser acessado diretamente. para acessar o outro grupo é necessário, primeiro, carregar a livraria do Maple numtheory mediante o comando with(numtheory). Entre as funções com argumento inteiro mais típicas relativas ao primeiro grupo, destacam-se as seguintes: Função Significado sing(n) Signo de n (1 se n>0, -1 se n<0, n real) n! Fatorial de n (n!=n(n-1)(n-2)....2.1)) binomial(n,m) Número combinatório n sobre m:(n!/(m!(m-n)!)) bernoulli(n) Enésimo número de Bernoulli Bn: euler(n) Enésimo número de Euler En: igcd(n1,n2,...,nk)') Máximo divisor comum de k números ilcm(n1,n2,...nk)') Mínimo divisor comum de k números igcdex(n1,n2,...nk)') Máximo divisor comum de k números, usando o logaritmo de Euclides max(n1,n2,...nk)') Máximo de k números min(n1,n2,...,nk)') Mínimo de k números ifactor(n)') ou factor(n) Decompõe n em fatores primos ifactors(n)') Dá os fatores primos de n em sua ordem irem(n,m) Resto da divisão de n entre m iquo(n1,n2) Parte inteiro do quociente n1/n2 iroot(n,m) Parte inteira de n ithprime(k) Devolve o primo k-ésimo seq(ithprime(k),k=1...n') Devolve os n primeiros primos isprime(n) Reconhece se n é primo ou não issqrfree(n) Diz se n é quadrado perfeito isqrt(n) Dá a parte inteiro da raiz quadrada de n issqr(n) Diz se n é o quadrado de um inteiro nextprime(n) Primo seguinte a n prevprime(n) Primo anterior a n chrem([n1..nx],[m1..mx])') Único inteiro n tal que: n(mod mi) = ni i =1....x type(expr,prime) Diz se expr é número primo ou não type(expr,facint) Diz se expr esta na forma fatorizada ou não type(expr,complex(integer)) Diz se expr é um inteiro gaussiano ou não Entre as funções com argumento inteiro mais típicas relativas ao segundo grupo, destacam-se as seguintes: Função Significado with(numtheory) Carrega a livraria numtheory do Maple factorset(n) Conjunto de fatores primos de n divisors(n) Lista dos divisores de n sigma(n) Soma dos divisores de n tau(n) Número de divisores positivos de n bigomega(n) Número de divisores primos de n mroot(n1,n2,n3) Tenha n1 ------ módulo n3 msrqt(n1,n2) Tenha n1 ------ módulo n2 mlog(n1,n2,n3) Tenha logaritmo de n1 em base n2 módulo n3 index(n1,n2,n3) Tenha logaritmo de n1 em base n2 módulo n3 nthpow(n1,n2) Tenha o maior n tal que n----- divida n1 cfrac(r) Fração contínua do racional r cfrac(polinomio) Fração contínua de cada uma das raízes reais do polinômio univariante dado invcfrac(frac) Converte a fração contínua frac para irracional quadrático B(n) Enésimo número de Bernoulli Bn: ------------------------------- fermat(n) ou F(n) Enésimo número de Fermat: --------------------------- imagunit(n) -------- módulo n mlog(p,q,r) Logaritmo de p em base q módulo r cyclotomic(n,variável) Dá o enésimo polinômio ciclotômico na variável especificada factorEQ(n,inteiro) Calcula a fatorização inteira de n o anel euclidiano ---------- phi(n) Dá o número de inteiros positivos menores ou iguais a n que são primos relativos com n invphi(n) Dá todos os inteiros positivos menores ou iguais a n que têm exatamente n inteiros positivos que são primos relativos jacobi(n1,n2) ou J(n1,n2) Dá o símbolo de Jacobi dos inteiros n1 e n2, ou seja, dá 1 se n1 é primo relativo com n2 e n2 é inteiro impar positivo, e -1 em outro caso kronecker({inec1,....,inecx},{---- Dá a aproximação diofática, no caso não homogênio, das inequações especificadas a respeito dos conjuntos de variáveis dados minkowski({--- Dá a aproximação diofática, no caso homogênio, das inequações especificadas a respeito dos conjuntos de variáveis dados legendre(n1,n2) ou L(n1,n2) Dá o símbolo de Legendre dos inteiros n1 e n2, ou seja, dá 1 se n1 é um resíduo quadrático de n2, e dá -1 se não for ( de diz que n1 é um resíduo quadrático de n2 se existir um inteiro m tal que ---------------(mod n2)). lambda(n) Dá o tamanho do maior grupo cíclico gerado por g(mod n) mersenne(n) ou M(n) Diz se ------------- é primo mcombine(n1,m1,n2,m2) Dá o inteiro n tal que n---- m1(mod n1) e n---m2(mod n2). Dá FAIL caso não exista n mipolys(n,p) Dá o número de polinômios mónicos univariantes irredutíveis de grau n sobre Z(mod p) mipolys(n,p,m) Dá o número de polinômios mónicos univariantes irredutíveis de grau n sobre o campo de Galois definido por ------------mobius(n) Dá a função de Möbius do inteiro positivo n nthnumer(expr,n) Dá o enésimo numerador da fração contínua expr nthdenom(expr,n) Dá o enésimo denominador da fração contínua expr nthconver(expr,n) Dá o enésimo quociente parcial da fração contínua expr order(n1,n2) Dá a ordem do inteiro n1 no grupo multiplicativo módulo n2, ou seja, dá o menor inteiro m tal que ----------(mod n2) pdexpand(racional) Dá a expansão periódica do racional, ou seja, dá o signo, a parte inteira positiva, a parte não periódica e a parte periódica pprimroot(n) Dá a menor raiz sendo primitiva do inteiro positivo n, ou seja, dá o gerador do grupo cíclico baixo multiplicação módulo n contendo os inteiros relativamente primos com n, e caso não existam, dá o menor inteiro positivo que não excede a n e que é primo relativo a n pprimroot(n1,n2) Dá a menor raiz sendo primitiva do inteiro positivo n2 que é maior que n1 primroot(n) Dá a maior raiz primitiva do inteiro positivo n, ou seja, dá o gerador do grupo cíclico baixo multiplicação módulo n contendo os inteiros relativamente primos com n primroot(n1,n2) Dá a menor raiz primitiva do inteiro positivo n2 que é maior que n1 quadres(n1,n2) Diz se n1 é um resíduo quadrático módulo n2 rootsunity(p,n) Dá todas as raízes p-ésimas da unidade módulo n safeprime(n) Calcula o menor primo p maior que n tal que (p-1)/2 é também primo sq2factor(n) Dá a fatorização inteira de n em --------------- sum2sqr(n) Dá uma lista de pares de números cujos quadrados somam n thue(f(x.y)=m,[x,y]) Resolve a equação para f(x,y) --- Z(x,y) e irredutível sobre Q[x,y] e m inteiro thue(f(x,y)----m,[x,y]) Resolve a inequação para f(x,y) --- Z(x,y) e irredutível sobre Q[x,y] e m inteiro Vejamos alguns exemplos: Decomposição em fatores do número 24: > ifactor(24); Decomposição em fatores do número 999999999999: > ifactor(999999999999); Resto da divisão de 17 por 3: > irem(17,3); Máximo divisor comum de 1.000, 500 e 625: > igcd(1000,500,625); Mínimo múltiplo comum entre 1.000, 500 e 625: > ilcm(1000,500,625); O número 99.991, é primo? > isprime(99991); Efetivamente, o número era primo. Encontrar o número primo que ocupa o lugar 100: > ithprime(100); Encontrar todos os números que dividam 24: > with(numtheory):divisors(24); Fatores primos do número 12.267.845 e sua ordem de multiplicidade: > ifactors(12267845); Encontrar o conjunto de fatores primos do número 135.678.743: > with(numtheory):factorset(135678743); Logicamente, o número anterior será primo: > isprime(135678743); Encontrar o conjunto de fatores primos do número 135.678.742: > with(numtheory):factorset(135678742); Encontrar a lista de divisores, o número de divisores e a soma dos divisores do número 1.000.000: > with(numtheory):divisors(1000000); > with(numtheory):tau(1000000); > with(numtheory):sigma(1000000); Encontrar o logaritmo de 1.000.000 em base 8 e módulo 52: > with(numtheory):mlog(1000000,8,52); Encontrar a raiz quinta de 1.000.000 módulo 52: > with(numtheory):mroot(1000000,5,52); Exercício 4. Encontrar o número de combinações sem repetição de 45 elementos tomados de 9 em 9. Resolver o mesmo problema para n elementos tomados de 3 em 3. > binomial(45,9); > expand(binomial(n,3)); Exercício 5. Encontrar o resto da divisão de 2^134 entre 3. Encontrar também o número inteiro k=12mod8. > irem(2^134,3); > chrem([12],[8]); Exercício 5-6. Decompor em fatores primos o número 18.900 e encontrar todos os seus divisores. Encontrar também o número primo que ocupa oa posição 189. > ifactor(18900); > with(numtheory):divisors(18900); > ithprime(189); Exercício 5-7. Dois livros têm 840 e 384 páginas, respectivamente. Se estiverem formados por cadernos com número igual de folhas, e superior a 18 folhas, calcular o número de folhas de um caderno. > igcd(840,384); Exercício 8. Encontrar o número N que ao ser dividido por 16, 24, 30 e 32 dá o resto de 5. N-5 será múltiplo de 16, 24, 30 e 32, e como é pedido que se calcule o menor número, N-5 será o mínimo múltiplo comum de 16, 24, 30 e 32: > ilcm(16,24,30,32); Logo, N = 480+5 = 485 Exercício 9. Calcular o fatorial de 2000. Temos aqui um exemplo da alta precisão do Maple V. > 2000!; 115 Exercício 10. Calcular o número 2 -1 e ver se é primo ou não. Em caso de ser composto, decompor em seus fatores primos. Calcular os números primos anterior e posterior a Provar que o número posterior é efetivamente primo. > 2^115-1; Agora vamos verificar se é primo: > isprime(2^115-1); Logo, tal número não é primo. Decomposição em fatores primos: > ifactor(2^115-1); 2 115 -1. Calculamos agora os primos anterior e posterior, e vemos que o posterior é efetivamente primo. > prevprime(2^115-1); > nextprime(2^115-1); > isprime(nextprime(2^115-1)); Exercício 11. Calcular os 100 primeiros números primos. > seq(ithprime(k),k=1..100); Exercício 12. Dado o número 51648597: a) Verificar se é ou não primo b) Caso for composto, decompor em fatores primos c) Calcular o conjunto de seus fatores primos d) Fatores primos com grau de multiplicidade e) Divisores do número dado f) Soma dos divisores g) Número de divisores a) > isprime(51648597); Logo, não é primo. b) > ifactor(51648597); c) > with(numtheory):factorset(51648597); d) > ifactors(51648597); e) > with(numtheory):divisors(51648597); f) > with(numtheory):sigma(51648597); g) > with(numtheory):tau(51648597); Exercício 13. Resolver em Z[x,y] (soluções inteiras) as seguintes equações e inequações: a) x^2 + x*y + y^2 = 19 b) abs(x^3 + x^2*y - 2*x*y^2 - y^3)<5 c) abs(x^5 + x^4*y - 4*x^3*y^2 - 3*x^2*y^3 + 3*x*y^4 + y^5)<10 d) x^3 + y^3 = 5 a) > with(numtheory):thue(x^2+x*y+y^2=19,[x,y]); b) > with(numtheory):thue(abs(x^3+x^2*y-2*x*y^2-y^3)<=5,[x,y]); c) > with(numtheory):thue(abs(x^5+x^4*y-4*x^3*y^23*x^2*y^3+3*x*y^4+y^5)<=10,[x,y]); d) > with(numtheory):thue(x^3+y^3=5,[x,y]); Exercício 14. Resolver, no caso homogênio e no não homogênio, o seguinte sistema diofantico: abs (exp(1)*z1+2^(1/2)*z2 - s1)<=10^(-2) abs (3^(1/3)*z1+Pi*z2 - s2)<=10^(-4) > with(numtheory):minkowski({abs(exp(1)*z1+2^(1/2)*z2-s1)<=10^(2),abs(3^(1/3)*z1+Pi*z2-s2)<=10^(-4)},{z1,z2},{s1,s2}); > with(numtheory):kronecker({abs(exp(1)*z1+2^(1/2)*z2-s1)<=10^(2),abs(3^(1/3)*z1+Pi*z2-s2)<=10^(-4)},{z1,z2},{s1,s2}); Exercício 15. Fatorizar os seguintes números: a) 38477343 no anel Z( 11 ) b) 38434*sqrt(33) no anel Z( 33 ) c) 408294234124-4242*sqrt(29) no anel Z( 29 ) > with(numtheory):factorEQ(38477343,11); > with(numtheory):factorEQ(38434*sqrt(33),33); > with(numtheory):factorEQ(408294234124-4242*sqrt(29),29); Exercício 16. Fatorizar os seguintes inteiros em Z 2 : a) (1-sqrt(2))^(-4) b) 83424959 c) 9232-932*sqrt(2) > with(numtheory):sq2factor((1-sqrt(2))^(-4)); > with(numtheory):sq2factor(83424959); > with(numtheory):sq2factor(9232-932*sqrt(2)); Exercício 17. Desenvolver em fração contínua os seguintes números: a) 7/9 b) As raízes do polinômio x^6-x^5-6*x^4+6*x^3+8*x^2-8*x+1 c) As raízes do polinômio 6+139540883?*x^5+17033080*x^4+800302*x^3+18628*x^2+216*x+1 d) 11/9999997 e) 31^(1/2) > with(numtheory):cfrac(7/9); > with(numtheory):cfracpol(x^6-x^5-6*x^4+6*x^3+8*x^2-8*x+1); > with(numtheory):cfracpol(117260219*x^6+139540883*x^5+17033080*x^4+800302*x^3+18628*x^2+216* x+1); > with(numtheory):cfrac(11/9999997); > with(numtheory):cfrac(31^(1/2));