un peu plus d'aide pour Eratosthene
This commit is contained in:
@@ -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,
|
||||
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
|
||||
let eratosthene = n => {
|
||||
@@ -187,4 +204,4 @@ let eratosthene = n => {
|
||||
}
|
||||
return primes;
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
40
R4.01_R4.A.10/td_tp/tp1/src/eratosthene/eratosthene.html
Normal file
40
R4.01_R4.A.10/td_tp/tp1/src/eratosthene/eratosthene.html
Normal 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>
|
||||
23
R4.01_R4.A.10/td_tp/tp1/src/eratosthene/eratosthene.js
Normal file
23
R4.01_R4.A.10/td_tp/tp1/src/eratosthene/eratosthene.js
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user