Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env bash
- isPrime(){
- if [[ $1 -eq 2 ]] || [[ $1 -eq 3 ]]; then
- echo true
- return 0
- elif [[ $(($1 % 2)) -eq 0 ]] || [[ $(($1 % 3)) -eq 0 ]]; then
- echo false
- return 0
- fi
- i=5
- w=2
- while [[ $((i * i)) -le $1 ]]; do
- if [[ $(($1 % i)) -eq 0 ]]; then
- echo false
- return 0
- fi
- i=$((i + w))
- w=$((6 - w))
- done
- echo true
- }
- primeFactors() {
- local lastPrime=2
- local number="$1"
- if "$(isPrime "$number")"; then
- echo "($number)"
- return 0
- fi
- local result=""
- local counter=0
- while (( number % lastPrime == 0)); do
- number=$((number / lastPrime))
- counter=$((counter + 1))
- done
- if [[ $counter -eq 1 ]]; then
- result="${result}($lastPrime)"
- elif [[ $counter -ne 0 ]]; then
- result="${result}($lastPrime**$counter)"
- fi
- lastPrime=3
- counter=0
- while (( number % lastPrime == 0)); do
- number=$((number / lastPrime))
- counter=$((counter + 1))
- done
- if [[ $counter -eq 1 ]]; then
- result="${result}($lastPrime)"
- elif [[ $counter -ne 0 ]]; then
- result="${result}($lastPrime**$counter)"
- fi
- while (( number > 1 )); do
- lastPrime=$((lastPrime + 2))
- while ! $(isPrime $lastPrime); do
- lastPrime=$((lastPrime + 2))
- done
- counter=0
- while (( number % lastPrime == 0 )); do
- number=$((number / lastPrime))
- counter=$((counter + 1))
- done
- if [[ $counter -eq 1 ]]; then
- result="${result}($lastPrime)"
- elif [[ $counter -ne 0 ]]; then
- result="${result}($lastPrime**$counter)"
- fi
- if $(isPrime "$number"); then
- result="${result}($number)"
- number=1
- fi
- done
- echo "$result"
- }
- primeFactors $1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement