Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Написал Решето Эратосфена. Оцените! (https://javascript.ru/forum/misc/60855-napisal-resheto-ehratosfena-ocenite.html)

Bruha1991 23.01.2016 17:42

Написал Решето Эратосфена. Оцените!
 
Я начинающий JavaScript-программист. Написал решето Эратосфена при поиске простых чисел до 100 элементов. Вроде работает! Оцените пожалуйста код как для новичка. Кстати можно ли переменную i объявить в теле цикла (цикл отмечен комментарием).
<script>
	var a = [];
	var p = 2;
	var i;

	function searchPrime(p){
		for(i = 1; i < 98; i++){
			if((i + 2) == p){
				continue;
			}
			if(((i + 2) % p) == 0){
				a[i] = false;
			}
		}
	}

	function findP(){
		i = (p - 2 + 1);
		while(i < 98){
			if(a[i] == true){
				p = i + 2;
				return;
			}
		        i++;
		}
	}

	for(i = 0; i < 98; i++){ //можно ли объявить i в этом цикле?
		a[i] = true;
	}
			
	while((p * p) < 99){
		searchPrime(p);
		findP();
	}
			
	for(i = 0; i < 98; i++){
		if(a[i] == true){
			alert((i + 2));
		}
	}
</script>

Coriolan161 23.01.2016 19:37

Bruha1991,
Можно, начинающий программист, можно.
var a = [],
    p = 2;

	function searchPrime(p){
		for(var i = 1; i < 98; i++){
			if((i + 2) == p){
				continue;
			}
			if(((i + 2) % p) == 0){
				a[i] = false;
			}
		}
	}

	function findP(){
		var i = p - 1; //можно
		while(i < 98){
			if(a[i] == true){
				p = i + 2;
				return;
			}
		        i++;
		}
	}

	for(var i = 0; i < 98; i++){ //можно
		a[i] = true;
	}
			
	while((p * p) < 99){
		searchPrime(p);
		findP();
	}
			
	for(var i = 0; i < 98; i++){ //можно
		if(a[i] == true){
			console.log(i + 2);
		}
	}

Coriolan161 23.01.2016 19:41

Bruha1991,
Но очень много проходов по всем элементам массива.

Erolast 23.01.2016 20:43

Цитата:

Можно, начинающий программист, можно.
Но она все равно будет объявлена в контексте функции, а не блока.

Объявлять переменные с блочной областью видимости можно в ES6 с помощью ключевого слова let - https://learn.javascript.ru/let-const.


Часовой пояс GMT +3, время: 02:44.