Você está na página 1de 2

Universidade Federal de Pernambuco

Departamento de Eletrônica e Sistemas


Sistemas Discretos - Exercício Complementar - 1a Unidade
Orientações: (i) os alunos devem formar duplas ou realizar o exercício individualmente; (ii) será
feito um sorteio, de modo que cada dupla ou aluno realizará apenas uma das questões a seguir;
(iii) os alunos podem escolher a linguagem de programação de sua preferência para realizar a
questão; (iv) os alunos devem construir suas próprias funções a partir de operações básicas de
aritmética modular (adição e multiplicação). Não será permitido, por exemplo, usar uma função
pronta para fazer potenciação módulo p (ainda que essa esteja disponível na linguagem de
programação escolhida pelo aluno); (v) os alunos devem preparar um vídeo mostrando o seu
programa rodando. As respostas às perguntas feitas em cada questão também podem ser
respondidas no vídeo, usando slides ou outro material digital (escrito) que deixem clara a
resposta. (vi) os códigos produzidos pelos alunos e o material digital (escrito) utilizado nas
respostas também devem ser enviados no espaço apropriado no Google Classroom.

1) Escreva um programa que receba como entradas um número primo p < 100 e um número a
∈ Zp, e forneça em sua saída uma raiz quadrada de a (mod p), isto é, um número b ∈ Zp, tal
que b2 ≡ a (mod p). Depois, responda às perguntas a seguir (justifique todas as suas respostas
com base nas simulações que realizar e à luz de resultados associados aos chamados
“resíduos quadráticos” módulo p):
a) É sempre que a raiz quadrada em questão existe? Explique.
b) Quando a raiz quadrada em questão existe, ela é única? Justifique.

2) Escreva um programa que receba como entradas um número inteiro n < 100 e os coeficientes
de dois polinômios a(x) e b(x) cujos graus são, no máximo, 5 (o grau de a(x) e o de b(x) podem
ser diferentes). Os referidos coeficientes devem ser inteiros módulo n. Como saída, o programa
deve fornecer o polinômio c(x) resultante do produto entre a(x) e b(x), considerando que as
operações de adição e multiplicação necessárias a este cálculo são todas avaliadas módulo n.
Depois, responda às perguntas a seguir (justifique todas as suas respostas com base nas
simulações que realizar e à luz de resultados associados ao produto de polinômios módulo n):
a) Quando os polinômios a(x) e b(x) tem graus deg(a) e deg(b), respectivamente, o polinômio
c(x) tem necessariamente grau deg(c) = deg(a) + deg(b)? Justifique.
b) Realize um paralelo entre o produto implementado pelo programa e a operação de
convolução linear também avaliada módulo n.

3) Escreva um programa que receba como entradas um número primo p < 100, p ≡ 3 (mod 4), e
dois inteiros não simultaneamente nulos a, b ∈ Zp. Considere, então, o número escrito como ζ =
a + jb, em que j2 ≡ (p − 1) (mod p). O programa deve fornecer como saída o inverso de ζ (módulo
p), isto é, o número ζ−1 = c + jd, tal que (a + jb)(c + jd) ≡ 1 (mod p) (o produto no lado esquerdo
da congruência deve ser realizado como na aritmética complexa usual, mas considerando
adições e multiplicações módulo p). Depois, responda às perguntas a seguir:
a) Se ζ = a + jb satisfizer a2 + b2 ≡ ±1 (mod p), quanto vale c + jd? Justifique. b) Se ζ = a + jb
satisfizer a2 + b2 ≡ ±1 (mod p) e e + jf = (a + jb)m, em que m é um número inteiro positivo, quanto
vale (e2 + f2) (mod p)? Justifique.

4) Os polinômios de Chebyshev são bastante conhecidos na Engenharia e possuem diversas


aplicações. Em particular, polinômios de Chebyshev avaliados módulo um número primo p têm
utilidade em Criptografia de chave-pública, tanto para cifragem, quanto para realizar troca de
chaves e implementar assinaturas digitais. Em geral, o n-ésimo, n ∈ Z+, polinômio de
Chebyshev módulo p do primeiro tipo na variável
2

x ∈ Zp é denotado por Tn(x). Partindo dessas informações e realizando uma pesquisa sobre os
referidos polinômios, responda as questões a seguir:
a) Escreva um programa que receba como entrada um número primo p < 100, um inteiro n ∈ Z+
e um inteiro x ∈ Zp, e forneça como saída o valor de Tn(x) (módulo p). Sugestão: utilize a
fórmula de recorrência a partir da qual os polinômios em questão podem ser avaliados para
um x específico.
b) Como os polinômios de Chebyshev podem ser usados para realizar troca de chaves na
Criptografia de chave-pública? Em que se baseia a segurança de um esquema desse tipo?

5) A transformada numérica de Fourier é uma importante ferramenta para processamento de


sinais e codificação de canal, por exemplo. Ela corresponde ao mapeamento de um vetor coluna
x noutro vetor coluna X, ambos com N componentes pertencentes a Zp, em que p é um número
primo, por meio do seguinte produto matricial:
X = F · x.
Na expressão acima, a matriz F tem dimensões N × N e tem seu elemento F(k, i), na k-ésima
linha e na i-ésima coluna, k, i = 1, 2, . . . , N, dado por
F(k, i) = α(k−1)(i−1),
em que α é um elemento com ordem multiplicativa módulo p igual a N. A partir dessas
informações, faça o seguinte:
a) Escreva um programa que receba como entrada um número primo p e um valor inteiro N que
seja um divisor de p − 1. Em seguida, o programa deve encontrar um elemento α com ordem
multiplicativa módulo p igual a N.
b) O mesmo programa do item a) deve, então, receber, também como entrada, um vetor coluna
x de comprimento N com elementos pertencentes a Zp e fornecer o vetor X correspondente a
sua transformada numérica de Fourier.

Você também pode gostar