LaDissertation.com - Dissertations, fiches de lectures, exemples du BAC
Recherche

Script Shell crible d'Eratosthène

TD : Script Shell crible d'Eratosthène. Recherche parmi 298 000+ dissertations

Par   •  20 Mars 2021  •  TD  •  267 Mots (2 Pages)  •  318 Vues

Page 1 sur 2

Le crible d’Eratosthène

#!/bin/bash

# argument : limite supérieure pour la recherche de nombres entiers.

# POSIX compliant

# Check si on a 1 arg

[ $# -ne 1 ] && echo 'Need 1 arg' >&2 && exit 1

# Check si l'argument est un nombre entier

if ! [ "$1" -eq "$1" ] 2>/dev/null; then

    echo 'Argument must be an integer' >&2

    exit 1

fi

t="$(which bc)"

[ -z "$t" ] && echo "Error: 'bc' is not installed. Run apt-get install -y bc" >&2 && exit 1

upper_limit=$1           # argument du script, la limite supérieure

let split=$(( $(bc <<< "scale=0; sqrt($1)") + 1 ))

# On utilise bc pour calculer la racine carrée de la limite

primes=( '' $(seq $upper_limit) )

i=1

# On ajoute un compteur car un ne supprime pas de case dans le tableau, on les définit à ''...

# -2 car première case == '' et 2eme case == 1

# Ce compteur est utilisé pour la mesure du temps d'exécution. On affiche juste le nombre de résultats

# et pas des milliers de nombres premiers.

nb_primes=$((${#primes[*]} - 2))

while [ $((i += 1)) -le $split ]; do

# Optimisation du crible : la recherche s’effectue sur la racine carrée de l’intervalle initial.

  if [ -n "${primes[i]}" ]; then

    t=$i

    while [ $((t += i)) -le $upper_limit ]; do

      [ -n "${primes[t]}" ] && nb_primes=$((nb_primes - 1))

      primes[t]=

    done

  fi

done

# On "supprime" la 2eme case du tableau, car primes[1] == 1

primes[1]=

echo ${primes[*]}

echo "nb de resultats: $nb_primes"

exit $?

...

Télécharger au format  txt (1.5 Kb)   pdf (25.8 Kb)   docx (7.1 Kb)  
Voir 1 page de plus »
Uniquement disponible sur LaDissertation.com