Baixe o app para aproveitar ainda mais
Prévia do material em texto
Parte VIII Gerac¸a˜o de nu´meros aleato´rios 28 Introduc¸a˜o • A simulac¸a˜o de qualquer sistema onde existam com- ponentes aleato´rias requer a gerac¸a˜o ou obtenc¸a˜o de nu´meros que sa˜o “aleato´rios” em algum sentido. – Ex.: para simular o tamanho de uma fila, preci- samos determinar o tempo entre chegadas de cli- entes e o tempo de atendimento de cada cliente, que geralmente sa˜o modelados como varia´veis aleato´rias pertencente a determinadas distri- buic¸o˜es. • Valores para varia´veis aleato´rias definidas por qual- quer distribuic¸a˜o de probabilidades podem ser gera- dos utilizando valores IID de uma varia´vel aleato´ria com distribuic¸a˜o uniforme entre 0 e 1. – Portanto, chamaremos de “nu´meros aleato´rios” valores produzidos por uma varia´vel aleato´ria com distribuic¸a˜o uniforme entre 0 e 1. Tratare- mos a seguir da gerac¸a˜o deste valores. • Os primeiros me´todos foram essencialmente manuais: atirar objetos e dados, manipular cartas, retirar bolas numeradas de urnas. Ainda hoje sa˜o usados em jogos e em algumas loterias. – No in´ıcio do se´culo XX alguns dispositivos fo- ram criados para acelerar a gerac¸a˜o de nu´meros aleato´rios: discos girato´rios e impulsos ele´tricos no va´cuo (em tubos) (usados na de´cada de 50 pela loteria britaˆnica). – Muitos outros esquemas sa˜o utilizados no dia-a- dia: selecionar um nu´mero “aleatoriamente” em uma lista telefoˆnica ou em algum relato´rio com muitos nu´meros (como o censo), utilizar d´ıgitos de algum nu´mero irracional (como π). • Com a popularizac¸a˜o dos computadores maior atenc¸a˜o foi dada para me´todos compat´ıveis com a forma como os computadores trabalham. Considere- mos as seguites possibilidades: – Armazenar uma tabela de nu´meros aleato´rios. Como atualmente e´ comum simulac¸o˜es que utilizam milho˜es de nu´meros aleato´rios, este nu´meros devem ser mantidos em armazena- mento secunda´rio (como discos) que possuem acesso mais lento. – Acoplar um equipamento ele´trico para gerac¸a˜o de nu´meros aleato´rios. A principal desvantagem desta abordagem e´ a impossibilidade de repetir uma sequeˆncia gerada anteriormente (armaze- nar, como vimos, pode ser invia´vel). • Portanto, as pesquisas nas de´cadas de 40 e 50 voltaram-se para a gerac¸a˜o de nu´meros “aleato´rios” utilizando me´todos “nume´ricos” ou “aritme´ticos”. – Estes me´todos sa˜o sequenciais, com cada novo nu´mero sendo determinado pelos anterio- res com base em uma fo´rmula matema´tica fixa. • A primeira tentativa neste sentido foi o me´todo midsquare de von Neumann e Metropolis nos anos 40: Comec¸e com um nu´mero de 4 d´ıgitos e eleve ele ao quadrado, resultando em um nu´mero com ate´ 8 d´ıgitos. Complete com zeros a esquerda para que a representac¸a˜o tenha 8 d´ıgitos. Utilize os 4 d´ıgitos cen- trais como o pro´ximo nu´mero aleato´rio. Para obter um nu´mero entre 0 e 1 basta dividir por 104. Assim sucessivamente para obter os pro´ximos. – Intuitivamente o me´todo parece bom, ja´ que temos a tendeˆncia a achar que algo e´ “aleato´rio” quando na˜o conseguimos enxergar padro˜es. – Entretanto, este me´todo na˜o funciona bem. Um dos problemas se´rios desta abordagem e´ a forte tendeˆncia de gerar o valor 0, onde perma- necera´ neste valor para sempre. – Isto ilustra o perigo em assumir que sempre conseguiremos um bom gerador de nu´meros aleato´rios fazendo alguma coisa estranha em um nu´mero para obter o pro´ximo. n=100; x=zeros(1,n); x(1)=1234; for i=2:n; x(i)=mod(floor(x(i-1)*x(i-1)/100),10000); end; x=x/10000; hist(x) • Uma cr´ıtica aos me´todos aritme´ticos em ge- ral e´ o fato dos nu´meros gerados na˜o serem “aleato´rios” (no sentido de ser imprevis´ıvel). De fato, se conhecemos um nu´mero da se´rie gerada, sabe- mos exatamente quais sera˜o todos os pro´ximos. Por isso os nu´meros gerados por estes me´todos sa˜o muitas vezes chamados de “pseudo-aleato´rios”. – Na pra´tica, podemos aceitar geradores aritme´ticos desde que produzam nu´meros que se parec¸am com sorteios independentes de uma distribuic¸a˜o uniforme entre 0 e 1. Ou seja, que a sequeˆncia gerada passe com sucesso por uma se´rie de testes estat´ısticos (isto sera´ usado como definic¸a˜o de “nu´meros aleato´rios”). • Um “bom” gerador deveria possuir as seguintes propriedades: 22 1. Acima de tudo, os nu´meros deveriam parecer distribu´ıdos uniformemente entre 0 e 1, e na˜o deveriam exibir qualquer correlac¸a˜o entre eles. Caso contra´rio, o resultado da simulac¸a˜o pode ser completamente inva´lido. 2. Ser ra´pido e na˜o necessitar de muito armazena- mento. 3. Permitir repetir a gerac¸a˜o de uma dada sequeˆncia de nu´meros. Isto facilita a depurac¸a˜o programa que simula o modelo, e permite a com- parac¸a˜o de sistemas diferentes quando submeti- dos aos mesmos eventos. 4. Permitir a gerac¸a˜o de subsequeˆncias disjuntas. Cada subsequeˆncia e´ utilizada para simuladar uma determinada fonte de “aleatoriedade”. In- tersec¸o˜es entre estas subsequeˆncias pode produ- zir correlac¸o˜es indesejadas. • Os itens 2, 3 e 4 sa˜o atendidos por praticamente to- dos os geradores propostos. Alguns artigos no final da de´cada de 80 apontaram va´rios geradores utili- zados na pra´tica que falham em atender o item 1 (o mais importante). Atualmente os softwares de aux´ılio a` simulac¸a˜o esta˜o atentos a isso, e e´ fa´cil conseguir bibliotecas gratuitas (para as linguagens de programc¸a˜o mais populares) com geradores que aten- dem ao item1. 28.1 Geradores congruentes • Os me´todos baseados em congrueˆncias sa˜o da forma Xi = f(Xi−1, Xi−2, . . .) (mod m), onde Xi e´ o i- e´simo nu´mero gerado e f(.) e´ uma func¸a˜o deter- min´ıstica fixada. • Os valores gerados esta˜o entre 0 e m − 1. Portanto, os nu´meros entre 0 e 1 sa˜o obtidos por Ui = Xi/m. • ANALOGIA COM UMA ROLETA. • Os geradores de nu´meros aleato´rios mais populares sa˜o os Geradores Congruente Lineares. Estes sa˜o ge- radores baseados em congrueˆncia onde f(.) e´ uma func¸a˜o linear de Xi−1. 29 Geradores Congruente Linea- res • Sa˜o geradores definidos pela fo´rmula recursiva Xi = (aXi−1+b) (mod m), onde m (o mo´dulo), a (o mul- tiplicador), b (o incremento) e X0 (a semente) sa˜o inteiros na˜o negativos. Ale´m disso, m > 0, a < m, b < m e X0 < m. – Ex.: m = 16, a = 5, b = 3 e X0 = 7, ou seja, Xi = (5Xi−1 + 3) (mod 16). Portanto, X1 = (5 ∗ 7 + 3) (mod 16) = 38 mod 16 = 6, X2 = (5 ∗ 6 + 3) (mod 16) = 33 mod 16 = 1. Conti- nuando os ca´lculos chegamos a X16 = 7 = X0, ou seja, a partir deste ponto toda a sequeˆncia se repete. n=17; m=16; a=5; b=3; x=zeros(1,n); x(1)=7; for i=2:n; x(i)=mod(a*x(i-1)+b,m); end; x, x=x/m • Uma objec¸a˜o para este me´todo e´ o fato de cada valor Ui = Xi/m estar restrito ao conjunto {0, 1/m, 2/m, . . . , (m− 1)/m}. Por exemplo, na˜o te- mos como gerar um valor para Ui entre 1/m e 2/m, o que deveria acontecer com probabilidade 1/m. – Entretanto, com valores altos para m (utiliza-se m ≥ 109) os valores de Ui fornecem uma boa aproximac¸a˜o para distribuic¸a˜o uniforme entre 0 e 1. • A repetic¸a˜o de parte da sequeˆncia (observada no exemplo) e´ inevita´vel, e ocorre sempre que a sequeˆncia atinge algum valor gerado anteriormente (formando assim um ciclo). – O comprimento do ciclo gerado e´ chamado de “per´ıodo” do gerador. – Como 0 ≤ Xi ≤ m − 1, temos que o per´ıodo e´ no ma´ximo m. Quando o per´ıodo e´ igual a m, dizemos que o gerador e´ de “per´ıodo completo”. – Quando o gerador e´ de per´ıodo completo, qual- quer semente produzira´ o ciclo inteiro. Caso contra´rio, o per´ıodo vai depender da semente do gerador. – Ex.1: Xi = (2Xi−1 + 1) (mod 5). Com se- mente igual a 0, 1, 2 ou 3, o per´ıodo e´ igual a 4. Com semente igual a 4 o per´ıodo e´ igual a 1. – Ex.2: Xi = (3Xi−1 + 1) (mod 6). Existe ape- nas 1 ciclo com per´ıodo 2 (do valor 1 para o 4 e vice-versa). As sementes 0 e2 levam ao valor 1 (que pertence ao ciclo). As sementes 3 e 5 levam ao valor 4 (que pertence ao ciclo). • Como os projetos de simulac¸a˜o geralmente utilizam muitos nu´meros aleato´rios, e´ necessa´rio que o per´ıodo do gerador seja longo para evitar as repetic¸o˜es. – Ale´m disso, os geradores com per´ıodo completo sa˜o deseja´veis pelo fato de cada nu´mero entre 0 e m − 1 ter chance de ocorrer no ciclo (contri- buindo para a uniformidade). – Note pore´m que mesmo geradores com per´ıodo completo podem gerar sequeˆncias na˜o unifor- mes. Por exemplo, Xi = (Xi−1 + 1) (mod m) tem per´ıodo completo, mas gera nu´meros na or- dem 0, 1, 2, . . . ,m − 1. Ou seja, uma sequeˆncia com k valores, onde k e´ muito menor que m, possui apenas valores pro´ximos (e portanto, mal distribu´ıdos no intervalo de 0 a` m− 1). 23 • O teorema a seguir (demonstrado por Hull e Dobell em 1962) mostra as condic¸o˜es para que m, a e b pro- duzam um gerador com per´ıodo completo. Teorema1 Um gerador congruente linear tem per´ıodo completo se e somente se as treˆs condic¸o˜es a seguir sa˜o satisfeitas: 1. m e b sa˜o primos entre si. Ou seja, o u´nico inteiro positivo que divide m e b e´ 1. 2. Se q e´ um nu´mero primo (divis´ıvel apenas por 1 e por ele pro´prio) que divide m, enta˜o q divide a− 1. 3. Se 4 divide m, enta˜o 4 divide a− 1. • Dividir por m para obter o resto e´ uma operac¸a˜o aritme´tica lenta. Uma alternativa que evita esta di- visa˜o e´ utilizar m = 2w para algum w (geralmente o nu´mero de bits de uma word no computador utili- zado). – Neste caso, o resto sa˜o os u´ltimos w bits. – Ex.: 11010 dividido por 22 = 110 mais resto 10. – Atualmente a maioria dos computadores pos- suem words com 32 ou 64 bits. Ou seja, descon- siderando o bit de sinal temos m = 231 > 2.1 bilho˜es. – Ale´m disso, se w e´ o nu´mero de bits de uma word, esta abordagem se aproveita do “overflow de inteiros”. Quando uma operac¸a˜o aritme´tica provoca overflow, os bits mais significativos sa˜o descartados (em algumas arquiteturas), so- brando apenas o resto da divisa˜o por 2w. – Ex.: Xi = (5Xi−1 +3) (mod 16), em um com- putador hipote´tico com 4 bits por word. Se X0 = 5, quanto vale X1? 5 ∗ 5 + 3 = 28 (11100 em bina´rio). Como ocorre overflow, o bit mais significativo e´ perdido, restando 1100 (12 em de- cimal). Note que X1 = 28 mod 16 = 12. – E´ necessa´rio verificar exatamente como o over- flow de inteiros e´ tratado, o que depende da ar- quitetura do computador, do formato de repre- sentac¸a˜o de inteiros e da linguagem utilizada. Por exemplo, o bit de sinal pode ser modificado na operac¸a˜o. • Quando m = 2w, temos pelo Teorema 1 que o per´ıodo completo e´ obtido se b e´ ı´mpar e a− 1 e´ divis´ıvel por 4. – Valores para a e b que produzem bons geradores podem ser obtidos por tentativas. Alguns valo- res sa˜o fornecidos na literatura. Por exemplo, para b = 31 Kobayashi propoˆs a = 314.159.269 e b = 453.806.245. n=10000; m=2^31; a=314159269; b=453806245; x=zeros(1,n); x(1)=0; for i=2:n; x(i)=mod(a*x(i-1)+b,m); end; x=x/m; hist(x) • Note que geradores onde b = 0 (chamados de multi- plicativos) na˜o satisfazem a primeira condic¸a˜o do Te- orema 1, e portanto na˜o possuem per´ıodo completo. – Pore´m, os geradores multiplicativos sa˜o mais efi- cientes, mais simples, mais bem compreendidos e mais utilizados. Analisaremos a seguir este tipo de gerador. 29.1 Geradores Multiplicativos: b = 0 • Nesta sec¸a˜o analisaremos o gerador Xi = aXi−1 (mod m). • Quando m = 2w, Knuth provou em 1981 que o per´ıodo e´ no ma´ximo 2w−2 (ou seja, 1/4 do per´ıodo completo). – Ale´m disso, geralmente na˜o temos como deter- minar m/4 inteiros esta˜o distribu´ıdos (pode ha- ver grande concentrac¸a˜o em alguma regio˜es, pre- judicando a uniformidade). • Uma proposta para o valor de m que se mostrou bem sucedida e´ utilizar o maior nu´mero primo menor que 2w. – Ex.: O maior primo menor que 231 e´ 231 − 1. • Knuth (1981) mostrou que para m primo, o per´ıodo do gerador e´ m − 1 se a e´ um “elemento primitivo mo´dulo m”, isto e´, o menor valor inteiro para c tal que ac − 1 e´ divis´ıvel por m e´ c = m− 1. – Com m e a escolhidos desta forma, obtemos cada inteiro 1, 2, . . . ,m− 1 exatamente uma vez em cada ciclo. – Os valores para a que produzem bons geradores sa˜o identificados atrave´s de testes. Para m = 231− 1, dois valores para a teˆm sido largamente utilizados. Sa˜o eles a = 75 e a = 630.360.016. • Para m primo, na˜o dispomos do mecanismo de over- flow para evitar a operac¸a˜o de divisa˜o. – Um me´todo proposto para evitar a divisa˜o di- reta e´ chamado “divisa˜o simulada”. – Sejam m = 2w − q, X ′i = (aXi−1) (mod 2w) e k = aXi−1/2w� (que podem ser obtidos sem divisa˜o). aXi−1 = X ′i + 2 wk aXi−1 − kq = X ′i + 2wk−kq = X ′i + mk (aXi−1−mk) (mod m) = (X ′i+kq) (mod m) (aXi−1) (mod m) = (X ′i + kq) (mod m) 24 – Como q < 2w−1, enta˜o 2m = 2w+1 − 2q > 2w – X ′i + kq < 2m... Xi = { X ′i + kq, se X ′ i + kq < m X ′i + kq −m, se X ′i + kq ≥ m – Ex.: m = 231 − 1, a = 75, Xi−1 = 7. Logo X ′i = 7 6 (mod 231) = 117649, k = 0. 30 Geradores Tausworthe • Os geradores Tausworthe operam diretamente sobre os bits. • Uma sequeˆncia de d´ıgitos bina´rios e´ definida pela re- correˆncia bi = (c1bi−1 + c2bi−2 + . . . + cqbi−q) (mod 2), onde c1, . . . , cq sa˜o constantes bina´rias. • Neste caso, um ciclo e´ definido como uma sequeˆncia de valores bina´rios que se repetem continuamente. Portanto, como os q bits anteriores sa˜o utilizados, o per´ıodo pode chegar a 2q−1 (uma sequeˆncia de zeros e´ exclu´ıda, pois gera outra sequeˆncia de zeros). • Praticamente todos os geradores Tausworthe propos- tos sa˜o da forma bi = (bi−r + bi−q) (mod 2), para inteiros r e q satisfazendo 0 < r < q. – Note que a soma de varia´veis bina´ria mo´dulo 2 e´ o mesmo que a operac¸a˜o “ou exclusivo”, ou seja, bi = 0 se bi−r = bi−q, e bi = 1 se bi−r �= bi−q. – Ex.: r = 3, q = 5, b1 = b2 = . . . = b5 = 1. Assim, para i ≥ 6, bi e´ o ou exclusivo de bi−3 e bi−5. Os primeiros bi’s sera˜o 11111 00011011101010000100101100-111110.. Note a repetic¸a˜o apo´s 31 bits. • Para gerar nu´meros entre 0 e 1, podemos particionar a sequeˆncia em grupos de w bits, e dividir por 2w cada nu´mero representado por um grupo de bits. • Geradores Tausworthe oferecem algumas vantagens potenciais com relac¸a˜o aos Congruente Lineares. – Sa˜o independentes do computador utilizado (ta- manho da word). – Oferecem per´ıodos de qualquer tamanho. – Pore´m, testes emp´ıricos da qualidade estat´ıstica dos nu´mero gerados podem ser inconclusivos. n=32; r=3; q=5; b=ones(1,n); for i=q+1:n; b(i)=mod(b(i-r)+b(i-q),2); end; b, w=4; x=zeros(1,n/w); for i=1:n/w, for j=1:w, x(i)=x(i)+b(4*(i-1)+j)*2^(w-j); end; end; x 31 Combinando geradores • E´ poss´ıvel combinar dois geradores para produzir um gerador “melhor”. Algumas formas sa˜o: • Adicionando nu´meros aleato´rios obtidos por dois ou mais geradores. – Se Xi e Yi sa˜o duas sequeˆncia de nu´meros aleato´rios no intervalo de 0 a m− 1, eles podem ser combinados para produzir Wi = (Xi + Yi) (mod m). – Se estas sequeˆncias teˆm per´ıodos diferentes e sa˜o obtidos por algoritmos diferentes, isto pode me- lhorar consideravelmente o per´ıodo e a aleatori- edade. • Ou-Exclusivo dos nu´meros aleato´rios obtidos por dois ou mais geradores. Aqui a adic¸a˜o proposta anterior- mente e´ substitu´ıda por uma operac¸a˜o ou-exclusivo bit-a-bit. • Shuffle. – Utiliza uma sequeˆncia como ı´ndice para decidir qual nu´mero de uma segunda sequeˆncia deve ser retornado. – Nesta abordagem na˜o e´ fa´cil saltar sub- sequeˆncias longas (com o objetivo de produzir subsequeˆncias independentes). 31.1 Selec¸a˜o de sementes • Uma escolha ruim da semente pode gerar simulac¸o˜es com resultados falsos. Esta escolhadepende do gera- dor utilizado. Verifique as restric¸o˜es do gerador. Na˜o utilizar zero. Geradores multiplicativos e Tausworthe na˜o permitem semente zero. Evitar valores pares. Geradores multiplicativos com m = 2w exigem sementes ı´mpares. Na˜o subdividir uma sequeˆncia. Quando existe cor- relac¸a˜o entre os nu´meros gerados, na˜o utilizar uma mesma sequeˆncia para gerar va´rias varia´veis aleato´rias. Ex.: x1 tempo entre chegadas, x2 tempo de atendimento... Na du´vida, divida o ciclo em sub- sequeˆncias disjuntas. n=10000; m=2^31; a=5; b=1; x=zeros(1,n); x(1)=10; for i=2:n; x(i)=mod(a*x(i-1)+b,m); end; x=x/m; hist(x); figure; autocorr(x) Na˜o utilize sequeˆncias sobrepostas. Se a semente das sequeˆncia utilizadas para gerar duas v.a. se so- brepo˜em durante a simulac¸a˜o, estas duas v.a. tera˜o correlac¸a˜o. Fac¸a um programa para determinar as sementes que subdividem o ciclo em sequeˆncias di- juntas de mesmo tamanho. 25 Na˜o e´ necessa´rio determinar semente em replicac¸o˜es sucessivas. A semente deixada pela u´ltima replicac¸a˜o pode ser utilizada. Na˜o utilize sementes aleato´rias. Por exemplo, o relo´gio do sistema. Problemas: (i) impede a re- plicac¸a˜o da simulac¸a˜o (ex.: depurac¸a˜o), e (ii) na˜o garante sequeˆncias na˜o sobrepostas. Tambe´m na˜o use sementes produzidas por outros geradores. Parte IX Noc¸o˜es ba´sicas em teoria dos nu´meros 32 Preliminares: Func¸o˜es Inteiras e mod • Se x e´ um nu´mero real, denotamos – x� = o maior inteiro menor ou igual a x. (“o piso de x”) – �x = o menor inteiro maior ou igual a x. (“o teto de x”) • Ex.: 1/2� = 0, �1/2 = 1, −1/2� = −1 (na˜o zero!). • Algumas propriedades: – �x = x� se e somente se x e´ inteiro. – �x = x�+ 1 se e somente se x NA˜O e´ inteiro. – −x� = −�x – x− 1 < x� ≤ x ≤ �x < x + 1 33 Divisibilidade • Dizemos que “m divide n” (ou “n e´ divis´ıvel por m”) se m > 0 e a raza˜o n/m e´ um inteiro. Denotamos m \ n ⇔ m > 0 e n = mk para algum inteiro k. – A relac¸a˜o “n e´ mu´ltiplo de m” e´ ideˆntica, exceto pelo fato de que m na˜o precisa ser positivo. – Ex.: O u´nico mu´ltiplo de 0 e´ o pro´prio 0. Todo inteiro e´ mu´ltiplo de -1, mas nenhum inteiro e´ divis´ıvel por -1 (por definic¸a˜o). • O “ma´ximo divisor comum” (mdc) de dois inteiros m e n e´ o maior inteiro que divide ambos: mdc(m,n) = max{k | k \m e k \ n}. – Ex.: mdc(12, 18) = 6. Este conceito e´ familiar, visto que usamos em simplificac¸a˜o de frac¸o˜es: 12/18 = (6 ∗ 2)/(6 ∗ 3) = 2/3. • O “mı´nimo mu´ltiplo comum” (mmc) de dois inteiros POSITIVOS m e n e´ o menor inteiro POSITIVO que e´ mu´ltiplo de ambos: mmc(m,n) = min{k | k > 0, m \ k e n \ k}. – Ex.: mmc(12, 18) = 36. Utilizamos este con- ceito para determinar o mı´nimo denominador comum de frac¸o˜es: 7 12 + 1 18 = 21 36 + 2 36 = 23 36 . • O mdc e´ facilmente calculado atrave´s do algoritmo de Euclides (desenvolvido a 2300 anos!). – Para calcular mdc(m,n), com 0 ≤ m < n, utili- zamos a recorreˆncia: mdc(0, n) = n mdc(m,n) = mdc(n mod m,m), para m > 0. – Ex.: mdc(12, 18) = mdc(6, 12) = mdc(0, 6) = 6. – Prova: qualquer nu´mero que divide m e n tambe´m divide n mod m = n− n/m�m. • O algoritmo de Euclides tambe´m permite obter intei- ros m′ e n′ tal que m′m + n′n = mdc(m,n). – Se m = 0, enta˜o retorne m′ = 0 e n′ = 1. Caso contra´rio, retorne m′ = m − n/m�r e n′ = r, onde r = n mod m e rr + mm = mdc(r,m). – Ex.: obter m′ e n′ tal que m′12 + n′18 = mdc(12, 18). Utilizando o exemplo anterior, va- mos comec¸ar com mdc(0, 6) = 0 ∗ 0 + 1 ∗ 6 (ou seja, m′ = 0 e n′ = 1). Agora vamos obter m′ e n′ tal que mdc(6, 12) = m′ ∗ 6 + n′ ∗ 12. Para isso, utilizamos r = 12 mod 6 = 0 e r ∗ 0 + m ∗ 6 = mdc(0, 6), ou seja, r = 0 (o m′ anterior) e m = 1 (o n′ anterior). Portanto, m′ = 1 + 2 ∗ 0 = 1 e n′ = 0. Continuando, obtemos mdc(12, 18) = (−1)12 + 1 ∗ 18. – Prova: mdc(m,n) = mdc(r,m) = rr + mm = r(n− n/m�m) + mm = (m− n/m�r)m + rn. 34 Nu´meros primos • Um nu´mero inteiro positivo p e´ chamado “primo” se ele tem apenas dois divisores: 1 e p. – Por convenc¸a˜o o nu´mero 1 na˜o e´ primo, portanto os primeiros primos sa˜o 2,3,5,7, 11,13,17,19, 23,29,31,37, 41.. – Nu´meros com treˆs ou mais divisores sa˜o chama- dos de “compostos”. – Todo inteiro maior que 1 ou e´ primo ou com- posto, nunca ambos. 26 • A importaˆncia dos nu´meros primos vem do fato de todo inteiro n > 1 poder ser escrito como um produto de nu´meros primos, n = p1 . . . pm, onde p1, . . . , pm sa˜o primos. – Prova: por induc¸a˜o, assuma que esta proprie- dade vale para todo inteiro maior que 1 e menor que n. Se n na˜o for primo, enta˜o ele tem um divisor 1 < n1 < n. Assim, podemos escrever n = n1n2, com 1 < n2 < n. Mas por hipo´tese, n1 e n2 podem ser escritos como produto de pri- mos. Caso base: 4 = 2 ∗ 2. • O Teorema Fundamental da Aritme´tica estabelece que existe apenas uma forma de escrever um inteiro n > 1 como um produto de primos em ordem decres- cente. – Ex.: 12 = 22 × 3, 18 = 2× 32. – Enta˜o, podemos escrever, n = 2n2×3n3×5n5×7n7 . . . , onde cada np ∈ N. – Assim, para multiplicar dois nu´meros basta so- mar os expoentes dos fatores primos, n = mk ⇔ np = mp + kp, para todo primo p. – Ex.: 12× 18 = 22+1 × 31+2 = 216. – Isto implica que, m \ n ⇔ mp ≤ np, para todo primo p. – E consequentemente, k = mmc(m,n) ⇔ kp = max{mp, np}, ∀p. k = mdc (m,n) ⇔ kp = min{mp, np}, ∀p. – Ex.: mmc(12, 18) = 2max{2,1}+3max{1,2} = 22× 32 = 36, mdc(12, 18) = 2min{2,1} + 3min{1,2} = 21 × 31 = 6. – Como consequeˆncia da fatorac¸a˜o u´nica, se um primo p divide m × n, enta˜o ele divide m ou n (ou ambos). Note que isso na˜o necessariamente verdadeiro para nu´meros compostos. Ex.: 4 di- vide 60 = 6× 10, mas na˜o divide nem 6 nem 10 (os fatores primos 2× 2 foram separados). 35 Nu´meros primos entre si • Dizemos que dois inteiros m e n sa˜o “primos entre si” quando eles na˜o teˆm fatores primos em comum, ou seja, mdc(m,n) = 1. – Ex.: quando simplificamos uma frac¸a˜o, esta- mos reduzindo o numerador e o denominador a nu´meros primos entre si. 12/18 = (6×2)/(6× 3) = 2/3 (na˜o temos como simplificar mais, pois 2 e 3 sa˜o primos entre si). De modo geral temos que os nu´meros m/mdc(m,n) e n/mdc(m,n) sa˜o primos entre si. • Pela definic¸a˜o, temos que dois inteiros m e n sa˜o pri- mos entre si se e somente se min{mp, np} = 0 para todo primo p. – Esta condic¸a˜o pode ser escrita como mp×np = 0 para todo primo p. – Com isso, podemos provar que k e m sa˜o primos entre si e k e n sa˜o primos entre si se e somente se k e m× n sa˜o primos entre si. – Prova: note que kp ×mp = 0 e kp × np = 0 se e somente se kp × (mp + np) = 0. 36 Operador “MOD” • Dados dois inteiros n e m �= 0, denotamos por n mod m o resto da divisa˜o de n por m. – Como n/m� e´ o quociente desta divisa˜o, temos que n = m× n/m�+ n mod m. – Portanto, n mod m = n−m× n/m�. – Ex.: 5 mod 3 = 5− 3× 5/3� = 2. 5 mod −3 = 5− (−3)× −5/3� = −1. −5 mod 3 = −5− 3× −5/3� = 1. −5 mod −3 = −5− (−3)× (−5)/(−3)� = −2. • Chamamos o nu´mero apo´s o “mod” de “mo´dulo”. • Pela definic¸a˜o, temos que 0 ≤ n mod m < m, se m > 0. 0 ≥ n mod m > m, se m < 0. • O operador “mod” e´ distributivo em relac¸a˜o a` mul- tiplicac¸a˜o: d× (n mod m) = (dn) mod (dm). – Prova: d× (n mod m) = d× (n−m× n/m�) = dn− dm× (dn)/(dm)� = (dn) mod (dm) • Em muitos casos o operador de congrueˆncia (“≡”) simplifica a notac¸a˜o. Ele e´ definido como a ≡ b (mod m) ⇔ a mod m = b mod m. – Ou seja, este operador indica que a e b produzem o mesmo resto quando divididos por m. – Este operador e´ lido “a e´ congruente a b mo´dulo m”. – Ex.: 9 ≡ −16 (mod 5), pois 9 mod 5 = 4 e −16 mod 5 = 4. • A operac¸a˜o de congrueˆncia pode tambe´m ser definida como a ≡ b (mod m) ⇔ a− b e´ mu´ltiplode m. 27 – Prova: como a = k ×m + a mod m para algum inteiro k, e b = q × m + b mod m para algum inteiro q, enta˜o a−b = (k−q)m (pois a mod m = b mod m). – Esta relac¸a˜o facilita a determinac¸a˜o de con- grueˆncias. Ex.: 9 ≡ −16 (mod 5), pois 9 − (−16) = 25 e´ mu´ltiplo de 5. • A operac¸a˜o de congrueˆncia e´ uma “relac¸a˜o de equi- valeˆncia”, ou seja, satisfaz as leis (i) a ≡ a (reflexiva) (ii) a ≡ b ⇒ b ≡ a (sime´trica) (iii) a ≡ b e b ≡ c ⇒ a ≡ c (transitiva) – Prova: (iii) se a mod m = b mod m e b mod m = c mod m, enta˜o a mod m = c mod m. • Podemos somar e subtrair elementos congruentes sem perder congrueˆncia: a ≡ b e c ≡ d ⇒ a + c ≡ b + d (mod m) a ≡ b e c ≡ d ⇒ a− c ≡ b− d (mod m) – Prova: se a − b e c − d sa˜o mu´ltiplos de m, enta˜o (a + c) − (b + d) = (a − b) + (c − d) e (a− c)− (b− d) = (a− b)− (c− d) tambe´m sa˜o mu´ltiplos de m. • O mesmo vale para multiplicac¸a˜o: a ≡ b e c ≡ d ⇒ ac ≡ bd (mod m). – Prova: ac− bd = (a − b)c + b(c − d) e´ mu´ltiplo de m, pois a− b e c− d sa˜o mu´ltiplos de m. – Uma consequeˆncia direta desta propriedade e´ a ≡ b ⇒ an ≡ bn (mod m), para n ∈ N. – Note que ac ≡ bd (mod m) na˜o implica em a ≡ b (mod m). Ex.: 3 × 2 ≡ 5 × 2 (mod 4) mas 3 na˜o e´ congruente a 5 (mod 4). • Podemos multiplicar/dividir a congrueˆncia e o mo´dulo por uma constante na˜o nula: ad ≡ bd (mod md) ⇔ a ≡ b (mod m), para d �= 0. – Prova: (ad) mod (md) = a mod m e (bd) mod (md) = b mod m. • Podemos dividir apenas o mo´dulo: a ≡ b (mod md) ⇒ a ≡ b (mod m). – Prova: se a − b e´ mu´ltiplo de md, tambe´m e´ mu´ltiplo de m. • A lei abaixo permite dividir a congrueˆncia modifi- cando o mo´dulo o mı´nimo poss´ıvel: ad ≡ bd (mod m) ⇔ a ≡ b ( mod m mdc(d,m) ) . – Prova: pelo algoritmo de Euclides, existem in- teiros d′ e m′ tal que d′d + m′m = mdc(d,m), logo d′d ≡ mdc(d,m) (mod m). Utilizando a ≡ a, temos que ad′d ≡ a × mdc(d,m). O mesmo vale para bd′d ≡ b × mdc(d,m). Multi- plicando ambos os lados de ad ≡ bd por d′ ob- temos por transitividade que a × mdc(d,m) ≡ b×mdc(d,m) (mod m). Agora basta dividir a congrueˆncia e o mo´dulo por mdc(d,m). – Um caso particular importante ocorre quando d e m sa˜o primos entre si: ad ≡ bd ⇔ a ≡ b (mod m). – Ex.: se m na˜o e´ mu´ltiplo de 5, temos que 15 ≡ 35 (mod m) pode ser simplificado para 3 ≡ 7 (mod m). • Se a ≡ b com relac¸a˜o a dois mo´dulos, podemos com- binar os modulos da seguinte forma: a ≡ b (mod m) e a ≡ b (mod n) ⇔ a ≡ b (mod mmc(m,n)). – Prova: a−b e´ mu´ltiplo de m e n se e somente se e´ mu´ltiplo de mmc(m,n) (princ´ıpio da fatorac¸a˜o u´nica). – Portanto, quando m e n sa˜o primos entre si, a ≡ b (mod m) e a ≡ b (mod n) ⇔ a ≡ b (mod mn). – Se m tem fatorac¸a˜o em primos 2m23m35m5 . . ., a ≡ b (mod m) ⇔ a ≡ b (mod pmp), ∀ primo p. 37 Aplicac¸a˜o na gerac¸a˜o de nu´mero aleato´rios • Seja φ(m) o nu´mero de valores inteiros entre 0 e m−1 que sa˜o primos com relac¸a˜o a m. • Lema A. Se p e´ primo, enta˜o φ(pe) = pe−1(p − 1), onde e e´ um inteiro positivo. – Prova: por induc¸a˜o em e. Hipote´se: vale para todo expoente menor que e. Caso base: vale para e = 1, pois todos os p− 1 nu´meros menores que p sa˜o primos em relac¸a˜o a` p. Para cada k = 1, . . . , e − 1, devemos remover do intervalo entre pe−1 e pe todos os nu´meros da forma d × pk, onde pe−k−1 ≤ d < pe−k e mdc(d, p) = 1. Por hipote´se, existe φ(pk) valo- res para d em cada um destes intervalos. Como todos os primos em relac¸a˜o a` pe−k sa˜o primos em relac¸a˜o a` pe, para cada nu´mero removido no in- tervalo entre pe−1 e pe, um novo nu´mero menor que pe−1 e´ contabilizado como primo em relac¸a˜o a` pe. Assim, φ(pe) = pe − pe−1 = pe−1(p− 1). 28 • Teorema de Euler. Para todo inteiro positivo m, e para qualquer a primo em relac¸a˜o a` m, temos que aφ(m) ≡ 1 (mod m). – Prova: Sejam d1, . . . , dφ(m) os nu´meros primos em relac¸a˜o a` m. Como a e di sa˜o primos em relac¸a˜o a` m, temos que a × di e´ primo em relac¸a˜o a` m (ou seja, mdc(adi,m) = 1). Vamos agora mostrar que adi mod m e´ primo em relac¸a˜o a` m (ou seja, adi mod m e´ igual a algum dj). Se adi < m, isto decorre de adi mod m = adi. Caso contra´rio, pelo algoritmo de Eu- clides, mdc(adi mod m,m) = mdc(adi,m) = 1. Os valores adi mod m sa˜o distintos, pois se adi ≡ adj , para algum par i �= j, ter´ıamos di ≡ dj pois a pode ser cancelado por ser primo em relac¸a˜o a` m (contradic¸a˜o!). Portanto existe uma bijec¸a˜o entre os valores adi mod m e os valores di. Assim, (ad1) . . . (adφ(m)) ≡ d1 . . . dφ(m). Como os di’s podem ser cancelados (pois sa˜o primos em relac¸a˜o a m), obtemos aφ(m) ≡ 1. • Vamos considerar geradores de nu´meros “aleato´rios” congruente lineares multiplicativos, definidos pela re- correˆncia: xn = (a× xn−1) mod m. – Os paraˆmetros deste gerador sa˜o a (multiplica- dor), m (mo´dulo) e x0 (semente). – Este gerador e´ o mais popular e o mais bem compreendido. – Resolvendo a recorreˆncia obtemos xn = (anx0) mod m. – O valor zero na˜o pode ser gerado, pois caso contra´rio toda a sequeˆncia seguinte seria nula. Portanto, este gerador ciclos com no ma´ximo m − 1 elementos distintos (ou seja, o per´ıodo e´ no ma´ximo m− 1). • Se d e´ um divisor de m e xn, enta˜o todos os elementos seguintes sera˜o mu´ltiplos de d, pois dk1 mod dk2 = d(k1 mod k2). – Para evitar esta propriedade indesejada, xn de- veria ser primo em relac¸a˜o a` m para todo n. – Isto limita o per´ıodo em φ(m). – Se m e´ primo, podemos ter um per´ıodo igual a m− 1 (caso base do Lema A). • Lemma B. Considere as se´ries: Xn = (aXn−1 + c) mod md, Yn = [(a mod m)(Yn−1 mod m)+(c mod m)] mod m, com Y0 = X0 mod m. Enta˜o, Yn = Xn mod m para n ≥ 0. – Prova: induc¸a˜o em n. Caso base, Y0 = X0 mod m. Hipo´tese: vale para ı´ndices menores que n. Aplicando a hipo´tese: Yn = [(a mod m)(Xn−1 mod m)+(c mod m)] mod m Xn = (aXn−1 + c) mod md = aXn−1+ c− qmd, para determinado inteiro q. Portanto, Xn ≡ aXn−1 + c (mod m). aXn−1 + c = (qam + a mod m)(qXm + Xn−1 mod m) + (qcm + c mod m), para de- terminados inteiros qa, qX e qc. Portanto, aXn−1 + c ≡ (a mod m)(Xn−1 mod m) + (c mod m) (mod m). Com isso concluimos que Yn ≡ Xn (mod m). 29
Compartilhar