un peu plus d'aide pour Eratosthene

This commit is contained in:
2026-01-26 10:09:53 +01:00
parent 657bfa1cba
commit dae058c2d4
3 changed files with 82 additions and 2 deletions

View File

@@ -172,7 +172,24 @@ En utilisant les fonctions/méthodes `forEach, filter, map, reduce, some, every,
Ecrire une fonction qui calcule tous les nombres premiers inférieurs à une valeur entière `n` donnée, Ecrire une fonction qui calcule tous les nombres premiers inférieurs à une valeur entière `n` donnée,
en utilisant le [crible d'Erastosthène](https://fr.wikipedia.org/wiki/Crible_d%27%C3%89ratosth%C3%A8ne). en utilisant le [crible d'Erastosthène](https://fr.wikipedia.org/wiki/Crible_d%27%C3%89ratosth%C3%A8ne).
Vous pourrez compléter le code suivant, et le tester : Le version du crible est volontairement "mal écrite" en terme de performance :
```js
let eratosthene1 = n => {
let numbers = Array.from({length : n - 2}, (v,k) => k + 2);
let p ,primes = [];
while(numbers.length){
[p,...numbers] = numbers;
numbers = numbers.filter( k => k%p != 0);
primes = [...primes,p];
}
return primes;
}
```
1. Expliquez précisément ce code. Testez et dites pourquoi qu'il n'est pas efficace.
2. Écrivez une version plus efficace et comparer les temps de calcul. Vous pourrez compléter le code suivant :
```js ```js
let eratosthene = n => { let eratosthene = n => {
@@ -187,4 +204,4 @@ let eratosthene = n => {
} }
return primes; return primes;
} }
```

View File

@@ -0,0 +1,40 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.classless.min.css"
>
<script src="eratosthene.js"></script>
</head>
<body>
<main>
<form role="search">
<input name="limit" type="text">
<input type="submit" value="compute">
</form>
<article>
<p>time : <span id="time1"></span></p>
<p>time : <span id="time2"></span></p>
<p id="primes"></p>
</article>
</main>
<script>
document.querySelector("form").addEventListener("submit",ev => {
ev.preventDefault();
let start,end;
start = performance.now();
primes = eratosthene1(ev.target.limit.value);
end = performance.now();
document.getElementById("time1").textContent = end - start;
document.getElementById("primes").textContent = primes;
})
</script>
</body>
</html>

View File

@@ -0,0 +1,23 @@
function eratosthene(n)
{
let primes = [];
let filterArray = [];
for(let i = 2; i <=n; i++){
// TODO
}
return primes;
}
function eratosthene1(n)
{
let numbers = Array.from({length : n - 2}, (v,k) => k + 2);
let p ,primes = [];
while(numbers.length){
[p,...numbers] = numbers;
numbers = numbers.filter( x => x%p != 0);
primes = [...primes,p];
}
return primes;
}