Primzahlen(Bash)

Aus IT074-Wiki

Wechseln zu: Navigation, Suche

Ermittlung durch Array

#!/bin/bash
 
# Füllt den 'array' von 2 (v=2) bis zum übergebenem Wert ($1)
# Hier werden gleichzeitig die Werte für 'k' und 'v' inkrementiert, das Komma dient dabei als Trenner.
for ((k=0,v=2; v <= $1 ; k++, v++)); do 
   array[$k]=$v
done
 
# Da die Keys (k) mit Null beginnen, ist der Zähler 'i' zunächst auch Null
i=0
 
# Iteriert über den 'array'
# Das Konstrukt ${#...[*]} gibt dabei die Anzahl der Elemente eines Arrays aus.
while [ "$i" -le "${#array[*]}" ]; do
   # Werte auslesen.
   v=${array[$i]}
   # Das Quadrat (**2) von 'v' berechnen und in Variable 'v2' speichern.
   let "v2 = $v**2"
   # Abbruch, wenn 'v2' größer (-gt) als der eingegebene Wert ist.
   if [ "$v2" -gt "$1" ]; then break; fi
      j=0
      # Iteriert nochmals über den 'array'.
      while [ "$j" -lt "${#array[*]}" ]; do
         va=${array[$j]}
         # Berechne Modulo von 'va' und 'v' und schreibe das Ergebnis in die Variable 'mod'.
         let "mod = $va % $v"
         if [ "$va" -gt "$v" ]; then
            if [ $mod == 0 ]; then
              # Löscht die Werte aus dem 'array'.
              unset array[$j]
              # Füllt den (neuen) array mit dem übriggebliebenen Werten des (alten) arrays
              array=( ${array[*]} )
            fi  
         fi
         let "j += 1"
      done  
   # Wir sind durch, also wird nun 'i' um den Wert 1 inkrementiert.
   let "i += 1"
done
 
# Gibt die gefundenen Primzahlen aus, also alle die Werte, die noch im 'array' sind.
echo ${array[*]}

Siehe auch