Edit in JSFiddle

function Sieve(m) { // Sieve2.js: m>=3
 
  var h= 1 + Math.floor((m-3)/2)
  var crible = []; // sv=new Array(h)
  var p=3;
  
  for (var i=0; i<m; i++){ 
  	crible[i]=true;
    $("#" + (i + 1)).attr("class", "prime");
  }
  $("#1").attr("class", "composed");// 1 n'est pas un nombre premier
  crible[1] = false;
  
  // premier cas "2"
  var multiple = 2 * 2;
  
  while(multiple <= m){
  	crible[multiple] = false;
    $("#" + multiple).attr("class", "composed");
    multiple += 2;
  }
  
  for(var potential_prime=3; potential_prime < m; potential_prime++){
    if(!crible[potential_prime]){//ce n'est pas un nombre premier
        continue
    }
    
    var multiple = potential_prime * 2;
    while(multiple <= m){
      crible[multiple] = false;
      $("#" + multiple).attr("class", "composed").delay(500);
      multiple += potential_prime;
    }
  }
}
function initTab(m){
	var i = 0;
  while(i*i < m ){
      i += 1;
  }
  for(var r=0; r<i; r++){
      var row = $("<tr/>");
  		for(var c=0; c < i; c++){
        if(1 + c + r * i > m){
        	continue; // pour éviter d'ajouter des nombres pas utiles
        }
      	var col = $("<td/>").attr("id", 1 + c + r * i).text(1 + c + r * i).appendTo(row);
      }
      row.appendTo($("#tbody"));
  }
}
$("#ok").click(function(){
  $("#tbody").children().each(function(){$(this).remove();});
	if($("#maxnum").val()){
  	initTab($("#maxnum").val());
  	Sieve($("#maxnum").val());
  }
});
 $("#explanation").text("Entrez le nombre maximal traité par le crible.");
<input type="number" max="10000" name="max_num" id="maxnum"/>
<button type="button" id="ok">
Calculer
</button>
<p id="explanation">

</p>
<table>
<tbody id="tbody">
  
</tbody>
</table>
.prime{
  background-color:green;
  color: white;
}
.composed{
  background-color:#FB0000;
}