2 Aritmética básica
Nesta página, vamos resumir brevemente as operações da aritmética básica em GAP
.
2.1 Operações aritméticas
As operações mais comuns em GAP
são +
(adição), -
(subtração), *
(multiplicação), /
(divisão), mod
, (resto) ^
(exponenciação). Experimente com os seguintes exemplos.
gap> 2+3;
5
gap> 2/4;
1/2
gap> (2+3)*(1/2);
5/2
gap> 2^3*3;
24
gap> 6 mod 4;
2
gap> -6 mod 4;
2
gap> 2^-2*3;
3/4
gap> 2.0;
2.
gap> 2.01+3.11;
5.12
gap> 1/3;
1/3
gap> 1.0/3;
0.333333
Note a diferença entre trabalhar com valores exatos (como por exemplo 1/3
) e valores aproximados (por exemplo 1.0/3
). Neste minicurso, nós vamos trabalhar com valores exatos.
2.2 Operações lógicas (booleanas)
Para comparar se dois valores são iguais, usamos a operação =
cujo valor é um valor lógico; ou seja, true
ou false
. As operações com valores lógicos são not
, and
e or
que funcionam exatamente como os respetivos conectivos na lógica matemática.
gap> 2 + 3 = 5;
true
gap> 2 + 3 = 5 or 2 + 3 = 6;
true
gap> 2 + 3 = 5 and 2 + 3 = 6;
false
gap> 2 + 3 = 5 and not 2 + 3 = 6;
true
Note também que a operção “não igual” é escrita como <>
. Por exemplo
gap> 2 <> 3;
true
gap> 3 <> 3;
false
2.3 Variáveis
As variáveis guardam valores que podem ser usados durante a computação. Uma variável é uma palavra de letras, números e alguns carateres especiais. Aqui é um exemplo simples.
gap> a := 2;
2
gap> a3 := 3;
3
gap> a_5 := 5;
5
gap> a := 2;
2
gap> b := 3;
3
gap> a + b; a*b;
5
6
Variávies podem conter valores mais complexos, como nos seguintes exemplos.
gap> s1 := "Hello";
"Hello"
gap> s2 := " World!";
" World!"
gap> Concatenation( s1, s2 );
"Hello World!"
2.4 Corpos finitos
Quando trabalhamos com estruturas algébricas, precisamos trabalhar com corpos além do corpo \(\mathbb Q\). Aqui em baixo veremos alguns exemplos para aritmética com corpos finitos. O corpo finito com \(q\) elementos pode ser construído com a função GF( q )
(Galois Field).
gap> GF(3);
GF(3)
gap> GF(5);
GF(5)
gap> GF(27);
GF(3^3)
Sabemos que o grupo multiplicativo de um corpo finito é cíclico. Isso quer dizer que em todo corpo finito \(\mathbb F\), existe um elemento \(z\in \mathbb F\) tal que os elementos não nulos de \(\mathbb F\) são as potências de \(z\); ou seja, \[
\mathbb F=\{0\}\cup \{z^0,z^1,\ldots,z^{q-2}\}
\] onde \(q=|\mathbb F|\). Este elemento chama-se elemento primitivo de \(\mathbb F\). Para uma potência de primo q
, função Z( q )
devolve um elemento primitivo explícito do corpo finito GF( q )
. Os elementos não nulos de GF( q )
são representados como potências de Z( q )
. Considere os seguintes exemplos.
gap> F := GF(11);
GF(11)
gap> e := One( F );
Z(11)^0
gap> z := Zero( F );
0*Z(11)
gap> p := PrimitiveElement( F );
Z(11)
gap> e+p;
Z(11)^8
gap> e+p^2;
Z(11)^4
Quando trabalhamos com o corpo \(\mathbb Z_p\), é frequentamente necessário considerar elementos de \(\mathbb Z_p\) como inteiros e vice versa. Nos seguintes exemplos, vamos ver como fazer isso em GAP
.
gap> F := GF(11);
GF(11)
gap> a := 2*One(F);
Z(11)
gap> b := 2*Z(11)^0;
Z(11)
gap> a = b;
true
gap> a1 := IntFFE( a );
2
gap> b1 := IntFFE( b );
2
gap> a1 in F;
false
gap> a1 in Integers;
true
gap> a1 = b1;
true
2.5 Tarefa
Faça as seguintes computações em GAP
.
- Calcule o resto de \(5^7+5^6+5^5\) módulo \(11\).
- Verifique por computação direta que \(a^7\equiv a\pmod 7\) para todo \(a\in\{0,\ldots,6\}\).
- Calcule o resto de \(a^8\) módulo \(8\) para todo \(a\in\{0,\ldots,7\}\). Ache valores para os quais \(a^8\not\equiv a\pmod 8\).
- Verifique que \(a^7=a\) para todo \(a\in\mathbb F_7\).
- Calcule o valor lógico de \[ 8^7 = 13 \mbox{ ou } (6+7 = 13 \mbox{ e } 5^3 \neq 125). \]