Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # primo
- # Testa a primalidade de um inteiro.
- # Se nao for quadrado perfeito nem divisivel por 2, 3 ou 5, apresenta a fatoracao prima do numero.
- #
- # Arkanon <arkanon@lsd.org.br>
- # 2013/05/03 (Sex) 14:08:34 (BRS)
- if [ $# = 0 ]
- then
- echo "Use: $(basename $0) <numero inteiro>"
- exit
- fi
- n=$1
- [ ${n#${n%?}} = 5 ] && divisor=5
- [ $[($(sed 's/./+&/g'<<<$n))%3] = 0 ] && divisor=3
- echo "02468" | grep -q ${n#${n%?}} && divisor=2
- export BC_LINE_LENGTH=0
- out=$(bc<<<"r=sqrt($n);scale=100;r==sqrt($n);r")
- quadrado_perfeito=$(echo "$out" | head -n1)
- raiz_quadrada=$(echo "$out" | tail -n1)
- [ $quadrado_perfeito == 1 ] && divisor=$raiz_quadrada
- if [ "$divisor" ]
- then
- [ $quadrado_perfeito == 1 ] && echo "quadrado perfeito"
- echo "divisivel por $divisor"
- exit
- fi
- # tem chance de ser primo
- echo "testando divisores impares de $n entre 7 e $raiz_quadrada"
- divisor=7
- while (( divisor < raiz_quadrada ))
- do
- # echo "$divisor .. $raiz_quadrada"
- [ $((n%divisor)) = 0 ] && break || ((divisor+=2))
- done
- if (( raiz_quadrada - divisor > 1 ))
- then
- quociente=$((n/divisor))
- $0 $quociente
- echo "$n: divisivel por $divisor. Quociente: $quociente"
- else
- echo "$n: primo"
- fi
- # EOF
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement