Executando verificação de segurança...
17

Por que a matemática é essencial para a programação?

Programar tem muito mais a ver com matemática do que você pensa. Sem saber nada de matemática é impossível trabalhar, não digo sobre resolver equações, calcular logarítmos e afins, mas a interdisciplinaridade da matemática (nome bonito XD) nos ajuda em vários campos da vida.

Com a matemática aprendemos lógica, que é a base fundamental para algorítmos e por sua vez para a programação. Um programador que não sabe lógica não passa de uma máquina de escrever código adoidado, sem nenhum critério. Mas o que isso tem a ver com a matemática em si?

Não existe magia

Tudo o que é construído dentro da programação tem um grande background matemático. Mas não se desespere, hoje em dia temos tudo tão abstraído e prontinho para usar que praticamente ninguém precisa lidar com problemas matemáticos diretamente ao programar caso não seja necessário.

Mas por que é importante entender esses conceitos matemáticos por trás da programação?

Nos últimos tempos vemos uma grande popularização da programação e das profissões adjascentes, todos querem uma oportunidade de emprego na área que mais cresce no mercado. Isso faz com que existam muitos iniciantes na área, aprendendo para logo se tornarem programadores e consequêntemente uma ampla concorrência para vagas de estágio e de júnior.

Essa concorrência faz com que o candidato precise se destacar de alguma forma. Mas veja, conhecer tudo o que tem de baixo do capô do carro não te fará um bom motorista, mas te fará conhecer os limites e um leque de outras possibilidades que aquelas peças podem proporcionar. Da mesma forma, nós programadores trabalhamos com limites e possibilidades a partir das nossas ferramentas, que são as linguagens de programação, conhecer o que há de baixo do capô pode até não nos fazer programadores melhores, mas nos fará entender melhor determinados comportamentos. Uma forma de se destacar é aprender esses conceitos de baixo do capô e isso sempre irá passar por uma base matemática muito sólida.

O estudo aliado à prática é imbatível quando queremos melhorar e nos destacar em um ambiente de ampla disputa, certamente aquele programador que entende algumas questões de baixo nível poderá se destacar muito por entender alguns comportamentos e conceitos oriundos da linguagem que utiliza. É aí que a matemática entra, ela é uma ferramenta para que possamos resolver problemas e entender conceitos de baixo e alto nível.

Para exemplificar isso, vamos resolver um problema muito conhecido da matemática e programação, para entendermos como isso funciona, o cálculo da função Seno(x), que mistura tópicos básicos e avançados de matemática.

Como calculamos seno(x)?

Ao passarmos pelo ensino médio, aprendemos que para calcular o seno de um ângulo α precisamos de um triângulo retângulo e seno(α) = CO / HIP, onde CO é o cateto oposto ao ângulo e HIP é o lado maior do triângulo.
Triângulo retângulo

O que precisamos entender é que a função seno não é simplesmente calculada de uma forma direta, como uma função f(x) = x², ela é um pouco mais complexa.

Para entendermos isso, tudo parte de um conceito: sequências

1, 2, 4, 9, 16, ..., n²

Uma sequência, segundo a matemática nada mais é que... bom, uma sequência. As sequêncieas têm algumas propriedades:

  • Ordem fixa
    Os elementos de uma sequência tem uma ordem pré definida, não podemos sair os trocando de ordem, pois teríamos uma nova sequência. Por exemplo:
    {a} = 1, 2, 3, 4, 5 é uma sequência simples, que tem apenas 5 elementos que seguem a ordem dos números naturais entre 1 e 5 inclusive. Mas e se invertermos as posições de 3 e 5?
    {b} = 1, 2, 5, 4, 3 agora é uma nova sequência com outra lógica.

  • Segue uma regra pré definida
    Todos os elementos seguem uma lógica para estarem ali, o que é meio óbvio, mas precisa ser documentado. Por exemplo, a sequência {m} = 1, 2, 4, 9, 16 segue a regra mi = i².
    Caso um conjunto de números não tenha uma regra então não pode ser uma sequência. Essa regra é chamada lei de ocorrência de sequência e é uma condição de existência.

  • Termo geral
    A forma com que vimos a regra da sequência {m} é um termo geral de sequência, isso é, sabendo o índice i, podemos saber qual é o elemento da sequência relacionado com esse i, por exemplo:

{a} = 3, 6, 9, 12, 13, ..., 3n

A sequência {a} tem um termo geral 3n, pois a sua regra é que cada termo é um múltiplo de 3, podemos saber quando vale qualquer elemento da sequência a partir de seu índice n. Podemos também utilizar o termo geral como notação para representar a sequência.

  • Pode ser finita ou infinita

  • Sequências infinitas podem convergir ou divergir
    Isto é, o termo geral quando o índice da sequência tende a infinito converge para uma constante, caso contrário a sequência diverge. Por exemplo:
    {b} = 1/n
    Para sabermos se a sequência converge ou não basta tirarmos o seu limite quando o seu índice tende ao infinito:
    lim n→∞ 1/n = 0, ou seja, quando n tende ao infinito o termo geral b tende a 0 o que significa que a sequência converge.

Mas e se somarmos isso tudo?

Certa vez um matemático qualquer teve uma brilhante ideia:

E se eu somar todos os termos de uma sequência?

A partir dessa ideia surgiu o pesadelo de muitos e a alegria de outros: as séries. Uma série nada mais é que a soma de todos os elementos de uma sequencia infinita. Ou seja, para uma sequência {a} = n + 1 existe uma série

Da mesma forma que com as sequências, séries podem convergir e divergir. Esse é assunto para várias semanas em um curso de Cálculo B e Análise Matemática A, então não vamos nos aprofundar muito, o que importa saber é que uma sequência que diverge é praticamente inútil, portanto sempre estamos preocupados com a convegência das séries.

Algumas séries tem o que chamamos de intervalo de convergência. Isso ocorre quando uma série tem um termo geral que depende de outra variável, como por exemplo:
P(x) = an(x - c)n (entenda implicitamente que a função P(x) é uma soma infinita).

No caso de P(x) a série não depende apenas de n, ela depende também do valor de x, que é uma outra variável. Enquanto |x| < c a série converge e, para qualquer outro valor, ela diverge.

Resolvendo o problema do seno(x)

Agora as coisas vão complicar um pouco, pois usaremos o conceito de derivada, que é um conceito simples de cálculo A mas avançado na matemática. Sugiro que pesquise bastante para entender o conceito e a seguinte solução.

No estudo de séries conhecemos a Série de Taylor que é uma das séries mais importantes. A partir dela podemos aproximar o valor de várias funções, como logarítimos, exponenciais e o próprio seno. Ela é escrita da seguinte forma:

Série de Taylor

Veja ela tem um determinado intervalo de convergência, isso é muito importante. O valor de an é a n-ésima derivada da função que se quer aproximar. Dessa forma, podemos representar a série de Taylor de outra forma, que chamamos de polinômio de Taylor:

Polinômio de Taylor

Veja que f'(c) é a derivada de f(c), f''(c) é a segunda derivada de f(c) e assim por diante. A derivada é feita em relação a n, não a x, por isso os termos que se sucederam, não vamos entrar em detalhes pois é um assunto bem extenso. O termo c é uma constante, que normalmente é um valor aproximado ao que queremos calcular, por exemplo:

Para a função ln(x), caso quisermos saber quanto vale ln(2,1) podemos aproximar 2,1 para 2, pois esperamos que o valor de ln(2,1) seja próximo de ln(2), assim:

Resolvendo log natural de 2 vírgula 1

Substituindo x pelo valor 2,1:

log natural de 2 vírgula 1 resolvido

Note que para esse exemplo utilizamos apenas três termos da série de taylor, mas quanto mais termos utilizamos, mais próximo o valor da série se aproxima do valor real.

De Taylor para Maclaurin

Na série de Taylor temos um caso especial, que é a série de Maclourin:

Série de Maclaurin

Na série de Maclaurin aproximamos a série de Taylor em torno de c = 0. Com essa série podemos calcular o valor aproximados de várias funções, como as trigonométricas e exponencial.

A função que queremos calcular é f(x) = seno(x), então vamos derivar!

f'(x) = cosseno(x)
f''(x) = -seno(x)
f'''(x) = -cosseno(x)
f''''(x) = seno(x)

e daqui por diante tudo se repete. A grande vantagem é: como estamos nos aproximando de 0, temos um valor conhecido tanto para seno(0) quanto para cosseno(0).

seno(0) = 0
cosseno(0) = 1.

dessa forma:

Solução seno de x

Solução no código

Vamos colocar isso agora no código, vou fazer a solução em javascript para ter um fácil entendimento, fique a vontade de resolver em outras linguagens e publicar aqui também :).

function seno(x) {
    function fat(n, total=1) {
        if(n === 1) return total
        else {
            return n * fat(n - 1, total * n)
        }
    }
    
    return x - ((x ** 3) / fat(3)) + ((x ** 5) / fat(5)) - ((x ** 7) / fat(7))
}

Pronto! Acabamos de escrever uma função que calcula qualquer valor de seno entre -π/2 e π/2 (sim, a função não irá funcionar para qualquer valor real da forma que está).

Coisas que deixamos de lado

Faltaram algumas coisas importantes para essa solução:

  • A função funcionar para qualquer valor real, assim como a função de cada linguagem
    Atualmente a função apenas funciona para |x| < π / 2, o que torna a função não muito utilizável.

  • Melhorar a precisão
    Se você implementar e rodar a função verá que o valor retornado é diferente do que a função Math.sin() retorna, em algumas casas decimais. Saiba que é possível ajustar a precisão para que fique exatamente igual, pois esse é o método que a maioria das linguagens utiliza para implementar a função seno, é importante termos uma boa precisão da nossa função.

Em uma próxima postagem irei resolver esses problemas e falar um pouco sobre precisão matemática na computação.

Considerações finais

Como puderam ver, para construirmos uma função muito simples que calcula um seno de um determinado ângulo precisamos passar por vários conceitos, desde sequências até cálculo e séries, isso nos mostra um fator básico da matemática e isso também vale para a programação. Nada do que aprendemos na programação é inútil, na pior das hipóteses vai nos ajudar a resolver problemas bem específicos. Da mesma forma, caso pulássemos a etapa de sequências por exemplo, jamais saberíamos o que são séries e não teríamos solução para o nosso problema, pular etapas na programação e na matemática é fatal para a nossa evolução.

Podemos até concordar que saber implementar uma função seno é inútil, pois já temos uma ferramenta para isso em todas as linguages, mas temos que lembrar que isso é uma base que no futuro irá nos ajudar a resolver novos problemas.

Lembre-se, a essencia da programação é a matemática, aprender sobre seus conceitos te fará um programador melhor e irá impactar diretamente nos seus códigos.


fonte das imagens: Engenharia 360

Carregando publicação patrocinada...
9

Matemática é fundamental para programar bem, mas muitos não percebem porque geralmente usa-se ela de maneira indireta e/ou sem perceber.

Computação tem uma ligação profunda com matemática, tanto que muitos cursos de Ciência da Computação nasceram em institutos de Matemática (só pra citar dois exemplos, foi assim na USP e na Unicamp). É claro que a Ciência da Computação acabou se tornando uma área de conhecimento própria, mas ainda flerta muito com a Matemática.

Muitos dos conceitos que a gente usa no dia a dia vieram diretamente da matemática. Funções, por exemplo, seguem basicamente a mesma ideia: recebe dados, faz algo com eles (seguindo determinadas regras) e retorna um resultado. SQL veio diretamente da Álgebra Relacional. Programação funcional é basicamente uma implementação do Lambda Calculus ("Daí que vem o lambda que muitas linguagens tem?" - De certa forma, sim) - e por aí vai, muita coisa que a gente usa nada mais é que um conceito matemático adaptado para ser usado em programação.

A própria lógica que usamos para criar algoritmos, também é um ramo da matemática. Álgebra booleana também. Quantas vezes vc já viu código assim:

int x = fazAlgo();
if (x >= 10) {
    // faz alguma coisa
} else if (x < 10) {
    // faz outra coisa
}

Ora, ele só entra no if se x for maior ou igual a 10. Se não for, a única opção que sobra é ele ser menor que 10, então pra que testar isso de novo? Bastava um else { faz outra coisa }. Esse código tem uma instrução inútil, completamente desnecessária. Agora imagine um sistema gigante com centenas de coisas parecidas espalhadas... Um mínimo de conhecimento em lógica já eliminaria tudo isso.


Várias técnicas matemáticas são usadas para provar que um algoritmo está correto, ou para determinar a sua complexidade. Muita coisa pronta que usamos no dia-a-dia são adaptações de coisas que já haviam sido resolvidas matematicamente.

Você pode não usar isso diretamente pra fazer o seu "sisteminha CRUD" ou sua API web, mas indiretamente garanto que está. Algum algoritmo usado em alguma função interna daquela dependência da dependência do seu projeto com certeza usa alguma coisa que veio diretamente da matemática, ou foi criada por teóricos da computação (e muitos deles também eram matemáticos). Um simples sort tem uma história enorme até chegar onde está (interessante notar que os primeiros algoritmos foram criados antes do computador). Ou seja, sem matemática, ficaríamos penando até para mostrar os itens do nosso site em ordem (seja alfabética, de preço, data, o que for).


Falando de forma mais ampla, o pensamento matemático amplia a sua capacidade de criar abstrações, que é algo importantíssimo, pois no fundo é isso que fazemos o tempo todo.

A matemática, se fosse pra resumir grosseiramente, vive de abstrações: cria-se um conjunto de regras sobre determinado conjunto de "coisas" (por exemplo, operações que podem ser feitas em um conjunto de números: somar, subtrair, etc), e a partir daí pode-se compor outras coisas (uso as operações para resolver problemas reais, como contabilizar quantidades/valores e produzir relatórios, etc).

Em programação é similar: criamos estruturas de dados/classes (abstrações que representam alguma entidade do mundo real) e regras sobre as mesmas (ex: cada compra tem N produtos, só pode adicionar produto se tiver no estoque, etc), e a partir daí materializamos isso no código. Sem as abstrações corretas, o código tende a ficar confuso.

E estudar matemática faz você melhorar a capacidade de criar abstrações. O problema é que esse ganho é indireto, por isso é tão difícil de perceber, e por isso que tanta gente acha que não precisa saber nada de matemática. Vc pode até conseguir, mas vai penar muito mais...

Outro problema, que vai mais além da questão, é o nosso sistema de ensino, que basicamente faz com que a esmagadora maioria das pessoas odeie matemática, ache que é inútil, sem nenhuma função social (sim, já ouvi essa barbaridade), etc. Some-se a isso os cursos e youtubers picaretas (que gostam de dizer que não precisa saber nada de matemática pra programar), e temos uma legião de programadores que realmente acham que matemática não vai ajudar em nada.

Felizmente temos posts como esse, que ressaltam a importância da matemática na nossa área.


Por fim, uma "pequena" observação (é só um detalhe, que meu pedantismo não deixa passar).

Embora o fatorial seja um exemplo "clássico" para ensinar recursão, a implementação recursiva é a pior solução. Ela só vale a pena em linguagens que otimizam a recursão em cauda, caso contrário, vc fica lotando a pilha à toa, correndo o risco de estourá-la - o que não ocorre com um loop simples (geralmente a solução mais adequada).

Esse é um ponto em que matemática e computação divergem. Na matemática, uma definição recursiva facilita em muitos casos, mas em computação, uma função recursiva nem sempre é a melhor opção (em termos de desempenho, de empilhamento de dados, memória, etc). Muitas vezes um loop é a melhor opção.

Só um detalhe, pela fórmula que você colocou:

seno

Não deveria ser assim?

function seno(x) {
    function fat(n) {
        if (n === 1)
            return 1;
        else {
            return n * fat(n - 1);
        }
    }
    return x - ((x ** 3) / fat(3)) + ((x ** 5) / fat(5)) - ((x ** 7) / fat(7));
}

Enfim, uma versão não recursiva seria:

// posso escolher até qual termo vou (coloquei 7 para ficar igual à versão recursiva)
function senoSemRecursao(x, limite = 7) {
    var result = x, sign = -1, denominador = 1;
    for (var factor = 3; factor <= limite; factor += 2) {
        denominador *= factor * (factor - 1);
        result += sign * (x ** factor) / denominador;
        sign *= -1;
    }
    return result;
}

Repare também que com um loop fica mais simples estabelecer até qual termo eu vou - na versão recursiva vai até o 7, mas e se eu quisesse ir até o 999? Basta passar como parâmetro: senoSemRecursao(angulo, 999) (claro que também dá para mudar a versão recursiva para fazer um loop, mas ainda sim não elimina o principal problema, que são as chamadas recursivas).

Outra otimização é que você não precisa calcular o fatorial toda hora. Pois o 5! é o mesmo que 5 * 4 * 3! (e olha só, no passo anterior eu já calculei 3!, não preciso calcular tudo de novo desde o 1). O mesmo vale para 7!: eu já calculei 5! no passo anterior, então basta pegar este resultado e multiplicar por 6 e 7. É isso que a versão não-recursiva está fazendo.

Em um teste simples, a versão recursiva foi cerca de 40% mais lenta. Claro que, se for rodar poucas vezes, a diferença será imperceptível, mas enfim...

Sei que o foco não é o algorimo em si, e sim a importância da matemática na nossa área, mas é que eu sou chato mesmo :-)

3

A forma de resolver é fruto da minha cadeira de Algorítimos na faculdade, onde utilizamos Fortran para fazer essa solução, aí sim a recursão pode ser muito melhor do que em linguagens como Javascript e afins. Na maior parte das vezes utilizar iteração vai ser mais rápido mesmo, mas eu acho mais elegante utilizar recursão, puro gosto mesmo.

Normalmente essas otimizações que você falou são feitas a nível de compilação, o próprio compilador faz isso para nós, pois um código muito otimizado tende a ser menos legível, especialmente quando estamos falando de matemática computacional. Lembrando que dificilmente bibliotecas com ferramentais matemáticos vão ser escritas em linguagens como Python ou Javascript, o que ocorre normalmente é escrever essas funções em C, C++ e outras linguagens de mais baixo nível e então disponibilizar para uma ser utilizada por uma linguagem de alto nível. Isso ocorre por vários fatores, principalmente o fator de que rodar um binário diretamente é muito mais rápido do que rodar um interpretador que compila em tempo real por exemplo, além de que o processo de compilação consegue otimizar muito o código.

Um exemplo para isso é a biblioteca Numpy do Python que é feita grande parte em C e é isso que faz com que seja rápida e otimizada. Por exemplo, construir uma Array com 1 milhão de elementos aleatórios e somar todos eles depois é imensamente mais rápido utilizando as funcionalidades do numpy do que com as próprias funcionalidades nativas do Python.

Mesmo iterando ainda assim não teríamos um resultado muito otimizado, saltos dentro da memória causam sempre um certo gargalo na aplicação. Isso serve tanto para recursão quanto para iteração, a cada chamada de função estamos fazendo mais e mais saltos dentro da memória o que causa lentidão. Em linguagens compiladas isso não é um problema, pois o próprio compilador se encarrega por otimizar, por exemplo substituindo a chamada da função pela própria função em cada local onde é chamada, removendo código morto, simplificando constantes, desdobrando laços de repetição e etc.

A minha solução na verdade não está completa, falta ajustar a precisão, de forma que consigamos garantir e definir quanto de erro teremos em relação ao valor real do seno. Eu poderia ter colocado apenas os valores exatos de cada fatorial, mas isso seria um problema para próximas implementações. A sua implementação é boa também, são várias formas de resolver o mesmo problema e você achou uma implementação até mais otimizada, porém um pouco menos legível. E programação é isso, saber negociar entre legibilidade e legibilidade. Parabéns pela implementação!

2

Provavelmente tem a tal da base para formar pensamento. Que nem minha professora de Estatistica e Matemática, ora bolas, onde uso isso, me traz uma demonstração de uso - claro que esse argumento vem bem depois. Não se usa tudo, mas oferece base para prever e planejar. Bom seria que alguém resolvesse tornar isso algo mais "visível" - hoje vejo como foi bom ter esses acessos, mas tem um universo inclusive na forma de trazer esse vasto campo da Matemática de forma menos formal. Acho supernecessário. Hoje tenho de ver o Akita dando puxôes de orelhas por falta dessa base. Grato por demonstrar!

2

Um gancho interessante que torna consequência motivadora da riquíssima informação que você trouxe é sobre um programador fazer ou não uma faculdade. Por mais que essa discussão seja longa e muitas vezes inútil, já que na maioria das vezes não chegam em muitos lugares, percebo que, nelas, há uma falta da argumentação: do quanto a faculdade( uma boa faculdade ) te amadurece intelectualmente para lidar com certos problemas computacionais. Acredito que em um ambiente acadêmico bem aproveitado nasce um programador destaque para as empresas, assim como acredita que um bom conhecimento matemático traz algumas diferenças em resolver certas complicações.

1

Eu acho sensacional o teu jeito de pensar, principalmente quando a grande massa pensa o oposto, hoje em dia existe um marketing gigantesco que para ser programador tu não precisa de matemática, mas o que eu sempre questiono é "Que tipo de programador você vai ser?"

Eu pessoalmente sou péssimo em matemática, eu acho que por conta desse deficit que tenho gera uma fascinação.

2

Isso em partes até é verdade. Teoricamente não precisamos saber nada de matemática para programar soluções que não precisem de matemática, mas como disse no post, a base da programação é a matemática, aprender sobre ela vai ajudar em muitos conceitos. Nem falo sobre os conceitos idênticos de ambas as áreas, se formos olhar para como resolvemos contas de divisão por exemplo, é basicamente um algorítmo.

Mas o que acontece é que muitos querem vender cursos, pode ver como o que não falta por aí é gente vendendo curso te prometendo que irá conseguir empregos com salários estratosféricos depois de 3 ou 6 meses, é puro marketing. Isso também se aplica a quem vende a programação como algo fácil, que qualquer um consegue fazer o que é uma mentira. Nem todos vão conseguir ser programadores, profissionalmente falando, apenas vão saber programar uma coisa ou outre e isso é normal. Na teoria todos podemos aprender tudo e ser quem quisermos, mas cada um tem afinidade com determinadas áreas e formas de pensar.

Alguns são melhores na escrita, outros nas vendas, em dar palestras, em programar e por aí vai. Mas uma coisa não muda: sem comprometimento, estudo e força de vontade nada sai do papel, nada vai pra frente e nada acontece, essas coisas são independentes de conhecimento e afinidade e é exatamente isso que define o tipo de programador que alguém vai se tornar.

1

Eu me lembro de um episódio engraçado de quando eu comecei a programar há uns 8 anos. Eu tinha 13 ou 14 na época.

Eu precisava subtrair uma data de vencimento com a data atual e mostrar os dias que faltam para o vencimento ("Vencerá em 6 dias").

Mas quando eu substraio uma data que já venceu com a data atual a quantidade de dias fica negativa, obviamente. ("Venceu em -6 dias") Eu lembro que eu demorei umas 2 horas para me ligar que bastava multiplicar o resultado por -1 quando a data for menor que a data atual.

Foi uma coisa tão estúpida e idiota que entendi a importância de desenvolver o pensamento matemático e entender como ela funciona e não apenas aprender fórmulas e etc.

1

Outro jeito é inverter a ordem em que elas são subtraídas:

if (d1 < d2)
  diferenca = d2 - d1;
else
  diferenca = d1 - d2;

Ou usar abs(diferenca), para pegar sempre o valor positivo :-)

1

A matemática é necessaria para tudo que for realizar e exija raciocinio abstrato.
Na computação existirão problemas científicos e problemas comerciais a serem resolvidos.
Para os problemas científicos a matemática será exigida e usada de forma extensiva por exemplo na Visão Computacional e na Inteligência Artificial.
Para os problemas comerciais como sistemas de vendas, aplicações para publicidade entre outros a matemática não sera aplicada de forma extensiva.
Para a programação a matemática é a base para a lógica, são disciplinas necessarias para quem vai trabalhar com computação, assim como banco de dados, interfaces de usuario, segurança de informação, redes, sistemas operacionais entre outras. Escolha seu caminho e foque em se especializar nas ferramentas a programação é a parte mais fácil.

1

Um dos grandes erros de quem entra na área é empurrar as matérias de matemática com a barriga, achando que não serve para nada. A utilização da matemática pura é rara no cotidiano da grande maioria dos desenvolvedores, é claro que existem exceções, entretanto a linha de raciocínio que é desenvolvida para resolver questões matemáticas é extremamente valiosa na hora de se construir algoritmos

1

a postagem é fabulosa, eu curso engenharia informática mas se não tivesse seguido por esta carreira teria obtado sem pensar 2 vezes em seguir o caminho da matemática, podemos pensar que a programação e a matemática nós nossos dias são inseparáveis pois a programação utiliza da matemática em muitas coisas (desde a geometria para a computação gráfica até a algebra abstrata para encontrar equivalência entre dois grafos) e a matemática usa dos algoritmos dos computadores para por exemplo encontrar números primos muito grandes e melhorar assim nossos sistemas de criptografia. Se algum dia tiver tempo posso começar uns quantos posts para o Tabnews falando de coisas da matemática aplicada a alguns problemas da nossa área.