Usuários online

terça-feira, 9 de agosto de 2011

Maior número primo conhecido

Olá alunos,

Já sabem que números primos são usados em algoritmos criptográficos de uso geral, principalmente na criptografia RSA. Números primos são importantes e conhecer os maiores números primos possíveis aumenta a dificuldade de quebra de segurança nesses algoritmos criptográficos.

Atualmente o maior número primo encontrado é 243.112.609 − 1 descoberto no dia 23 de agosto de 2008, num projeto de computação distribuída pela Internet, o GIMPS, que usa o tempo ocioso doprocessador de computadores pessoais, procurando por números primos específicos, do tipo 2p − 1, em que p é primo, chamados primos de Mersenne. Este último primo encontrado é o primo de Mersenne de número 46 e tem 12.978.189 dígitos.

Para quem quiser brincar com números primos, basta ter o OpenOffice.org (pode ser o LibreOffice ou BrOffice), fazendo o seguinte:

  • Criar um novo documento no OpenOffice.org Writer;
  • Copiar o código abaixo para uma nova macro do OpenOffice.org Basic.
  • Executar a macro escolhendo (quando for perguntado) 500 linhas, 20 colunas e maior número primo igual a 123456.
Notas
  • A execução pode levar alguns minutos (não mais do que 10, para 10.000 primos), pois não foi feito qualquer esforço para otimizar o código.
Public Plan AS Object

SUB TabelaDePrimos ()
EscreveTabela (CLNG (InputBox ("Quantas linhas:")), CLNG (InputBox ("Quantas colunas:")), CLNG (InputBox ("Maior número primo permitido:")))
END SUB

SUB EscreveTabela (MaxL AS LONG, MaxC AS LONG, MaxP)
DIM document AS object
DIM dispatcher AS object
'Dim Cel As Object
'Plan = ThisComponent.getCurrentController().getActiveSheet()

document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

' A palavra "COM" deve ser grafada em minusculo para funcionar.
' O formatador da Wikipedia esta colocando em maiusculo por engano.
DIM args1(3) AS new COM.sun.star.beans.PropertyValue

args1(0).NAME = "TableName"
args1(0).Value = ""
args1(1).NAME = "Columns"
args1(1).Value = MaxC
args1(2).NAME = "Rows"
args1(2).Value = MaxL

dispatcher.executeDispatch(document, ".uno:InsertTable", "", 0, args1())

' A palavra "COM" deve ser grafada em minusculo para funcionar.
' O formatador da Wikipedia esta colocando em maiusculo por engano.
DIM args2(0) AS new COM.sun.star.beans.PropertyValue

N=2
FOR l=0 TO MaxL-1
FOR c=0 TO MaxC-1
DO WHILE NOT ePrimo(N)
N=N+1
LOOP
IF N>MaxP THEN EXIT SUB
'Escreve na tabela
args2(0).NAME = "Text"
args2(0).Value = Str(N)
dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args2())
dispatcher.executeDispatch(document, ".uno:JumpToNextCell", "", 0, Array())
N=N+1
NEXT c
NEXT l
END SUB

FUNCTION ePrimo (n AS LONG) AS Boolean
IF n = 2 THEN
ePrimo = true
EXIT FUNCTION
END IF
IF n MOD 2 = 0 THEN
ePrimo = false
ELSE
FOR d = 3 TO SQR(n) STEP 2
IF n MOD d = 0 THEN
ePrimo = false
EXIT FUNCTION
END IF
NEXT d
ePrimo = True
END IF
END FUNCTION
Fonte: http://pt.wikibooks.org/wiki/Teoria_de_n%C3%BAmeros/10000_primos
Atenciosamente,

Nenhum comentário:

Postar um comentário

Observação: somente um membro deste blog pode postar um comentário.

LinkWithin

Related Posts Plugin for WordPress, Blogger...

NOSSO OBJETIVO

OBJETIVO

Este blog será usado para divulgação de minhas ideias, notícias sobre tecnologia, disponibilização de links para download de materiais diversos (incluindo materiais didáticos -- que poderão ser usados em minhas aulas e/ou cursos). Gostaria de DEIXAR BEM CLARO que quaisquer materiais disponibilizados através deste blog são, tão somente, para acompanhamento de aulas e/ou cursos, e não constituem de modo algum, aulas na modalidade "ensino à distância" (EAD). Alunos têm total acesso aos materiais disponíveis, mas somente como tutoriais passo a passo. Apostilas disponibilizadas através deste blog não são materiais obrigatórios em disciplinas cursadas ou cursos ministrados.

RESPONSABILIDADE

O autor deste blog não é responsável pelo mau uso, intencional ou não, de qualquer código de programa disponibilizado aqui. Os códigos de programas disponíveis neste blog para download é e serão sempre, e tão somente, para uso didático durante o aprendizado. Seja bem-vindo.