Algoritmos de Divisibilidade em Shell Script: Exemplos e Explicações – Diário de bordo #4
Algoritmos de Divisibilidade em Shell Script: Exemplos e Explicações – Diário de bordo #4

Algoritmos de Divisibilidade em Shell Script: Exemplos e Explicações – Diário de bordo #4

Nessa edição do diário de bordo, eu pretendo mostrar alguns algoritmos de divisibilidade em shell script.
A aritmética está presente em diversas aplicações tanto matemáticas quanto da própria ciência da computação. Ela encontra aplicações, por exemplo na criptografia RSA, que falaremos em breve.


1. Calculando o resto da divisão em shell script


O primeiro script que eu gostaria de compartilhar com vocês faz algo bastante simples, calcula o resto da divisão de um número natural pelos seus antecessores naturais.

 
#!/bin/bash

numero=$1

for((divisor=1; divisor< numero; divisor++)); do
echo "$(($numero % $divisor))
"
done


Esse tipo de cálculo que lida com os restos da divisão de um número natural por outro é bastante importante na aritmética modular e na teoria dos grupos Agora vamos ver outros algoritmos de divisiblidade com Shell script: 

2. Calculando os divisores de um número natural em shell

Nessa segunda etapa do código, eu estruturei o mesmo em funções. Elaborei uma função chamada numero_divisores, que lista todos os divisores do número natural dado e, em seguida diz quantos divisores naturais ele tem. 

numero_divisores(){
local numero=$1
for ((divisor = 1; divisor <= numero; divisor++)); do
if [ $((numero % divisor)) -eq 0 ]; then
echo "$divisor "
contador=$((contador + 1))

fi

done
echo "Número de divisores: $contador"

}

 

Uma outra função criada foi a função e_primo. Esta função faz uso de um laço for de 1 até o inteiro menor do que a raiz quadrada do núnero dado e calcula o resto da divisão desse número por cada um desses divisores. Se esse resto da divisão for zero para mais de dois casos, então esse número não é primo e a função retorna 1. Se as condições dos restos das divisões forem satisfeitas para que o número dado seja primo, a função retorna 0 (true). Veja o trecho de código: 

# Implementa a função e_primo, que verifica se um número natural dado é primo a partir do algoritmo do crivo de Eratóstenes 

e_primo(){

local num=$1

local dividendo

# 0 e 1 não são primos 




if[ $num -eq 0 ]; then 

echo "false"

fi

if[ $num -eq 1 ]; then 

echo "false"

fi

for (( i = 1; i*i <= $1; i ++  )); do 

if [ $(($1 % i)) -eq 0 ]; then

return 1  

else 

return 0

fi

done

}

E, finalmente, o código completo ficou assim: 

 


#!/bin/bash

clear

# Variáveis globais 




numero=$1

contador=0




# Implementa a função número de divisores - Esta função recebe um número natural, lista quais são os seus divisores e retorna o número de divisores naturais desse número 




numero_divisores(){

local numero=$1

for ((divisor = 1; divisor <=  numero; divisor++)); do 

if [ $((numero % divisor)) -eq  0 ]; then

echo "$divisor "

contador=$((contador + 1))




fi




done 

echo "Número de divisores:  $contador"




}

# Implementa a função e_primo, que verifica se um número natural dado é primo a partir do algoritmo do crivo de Eratóstenes 

e_primo(){

local num=$1

local dividendo

# 0 e 1 não são primos 

if[ $num -eq 0 ]; then 

echo "false"

fi

if[ $num -eq 1 ]; then 

echo "false"

fi

for (( i = 1; i*i <= $1; i ++  )); do 

if [ $(($1 % i)) -eq 0 ]; then

return 1  

else 

return 0

fi

done

}

#numero_divisores $numero 

numero_divisores $numero

if e_primo $1; then

echo "é primo"

else 

echo "não é primo"

fi

Em breve, poderei inserir mais funções nesse código, permitindo que ele realize mais operações aritméticas. Fica ainda como sugestões de códigos que eu já criei mas ainda não postei aqui, o cálculo do mmc e do mdc. Trarei isso em breve aqui no blog. 

Espero que gostem. Até a próxima. 

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *