Advertisement
mb6ockatf

primes.sh

Mar 29th, 2024 (edited)
655
0
153 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.63 KB | Source Code | 0 0
  1. #!/usr/bin/env bash
  2.  
  3. isPrime(){
  4.     if [[ $1 -eq 2 ]] || [[ $1 -eq 3 ]]; then
  5.         echo true
  6.         return 0
  7.     elif [[ $(($1 % 2)) -eq 0 ]] || [[ $(($1 % 3)) -eq 0 ]]; then
  8.         echo false
  9.         return 0
  10.     fi
  11.     i=5
  12.     w=2
  13.     while [[ $((i * i)) -le $1 ]]; do
  14.         if [[ $(($1 % i)) -eq 0 ]]; then
  15.             echo false
  16.             return 0
  17.         fi
  18.         i=$((i + w))
  19.         w=$((6 - w))
  20.     done
  21.     echo true
  22. }
  23.  
  24. primeFactors() {
  25.     local lastPrime=2
  26.     local number="$1"
  27.     if "$(isPrime "$number")"; then
  28.         echo "($number)"
  29.         return 0
  30.     fi
  31.     local result=""
  32.     local counter=0
  33.     while (( number % lastPrime == 0)); do
  34.         number=$((number / lastPrime))
  35.         counter=$((counter + 1))
  36.     done
  37.     if [[ $counter -eq 1 ]]; then
  38.         result="${result}($lastPrime)"
  39.     elif [[ $counter -ne 0 ]]; then
  40.         result="${result}($lastPrime**$counter)"
  41.     fi
  42.     lastPrime=3
  43.     counter=0
  44.     while (( number % lastPrime == 0)); do
  45.         number=$((number / lastPrime))
  46.         counter=$((counter + 1))
  47.     done
  48.     if [[ $counter -eq 1 ]]; then
  49.         result="${result}($lastPrime)"
  50.     elif [[ $counter -ne 0 ]]; then
  51.         result="${result}($lastPrime**$counter)"
  52.     fi
  53.     while (( number > 1 )); do
  54.         lastPrime=$((lastPrime + 2))
  55.         while ! $(isPrime $lastPrime); do
  56.             lastPrime=$((lastPrime + 2))
  57.         done
  58.         counter=0
  59.         while (( number % lastPrime == 0 )); do
  60.             number=$((number / lastPrime))
  61.             counter=$((counter + 1))
  62.         done
  63.         if [[ $counter -eq 1 ]]; then
  64.             result="${result}($lastPrime)"
  65.         elif [[ $counter -ne 0 ]]; then
  66.             result="${result}($lastPrime**$counter)"
  67.         fi
  68.         if $(isPrime "$number"); then
  69.             result="${result}($number)"
  70.             number=1
  71.         fi
  72.     done
  73.     echo "$result"
  74. }
  75.  
  76. primeFactors $1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement