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.