Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   найти простое число (https://javascript.ru/forum/misc/70505-najjti-prostoe-chislo.html)

Vardges 11.09.2017 13:51

найти простое число
 
Добрый день. Нужно получить рандомное число и узнать простое ли оно.
getRandomNumber();
function getRandomNumber(){
	var x=parseInt(Math.random()*20);
	console.log(x);
	for (var i=2;i<x;i++){
		var j=1;
		if(x>2 && x%j==0 && x%i!==0){
				var number=x+" простое";
		}else{
			var number=x +" Err";
		}	
	}
	document.write('<br>'+number)

Ошибка в if. Выдает все числа простыми, но не могу понять в чем ошибка.

Nexus 11.09.2017 14:51

getRandomNumber();
function getRandomNumber(){
	var x=parseInt(Math.random()*20),
		res=true;
	
	for (var i=2;i<x;i++){
		if(x<=1 || x%i==0){
			res=false;
			break;
		}	
	};

	var number=(x>1 && res)?x+" простое":x +" Err";
	alert(number);
};

Vardges 11.09.2017 14:56

var number=(x>1 && res)?x+" простое":x +" Err";
    alert(number);

эта часть слишком сложна для моего уровня, можно все это написать развернуто и пошагово,чтоб я понял.И что делает промежуточная (res).Заранее спасибо

j0hnik 11.09.2017 15:00

var number=(x>1 && res)?x+" простое":x +" Err";

аналогично
if(x>1 && res)  {
number=x+" простое";
}
else {
number = x +" Err";

}

Vardges 11.09.2017 15:30

Спасибо Большое

рони 11.09.2017 15:48

:write: зачем проверять лишнее ...
for (var i=2;i<x;i++){
for (var i=2;i<=Math.sqrt(x);i++){

Бипач 11.09.2017 16:26

Я как-то так делала

function calculateDividersCount(input) {
document.getElementById('para').innerHTML = '';
var count = 0;
for (var i = 0; i <= input; i++) {
if (input % i == 0) {
count++;
}
}
return count;
}

function myFunction(input) {
var result = "";
for (var i = 0; i <= input; i++) {
if (calculateDividersCount(i) == 2) {
result += i;
result += ',';
result += ' ';
}
}
return result.substring(0, result.length-2);
}



function displayDividersCount(){
var userInput = parseInt(document.getElementById('from').value);

document.getElementById('para').innerHTML = myFunction(userInput) + '';
}

рони 11.09.2017 17:25

Бипач,
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.

RuBrain 07.02.2020 13:13

Цитата:

Сообщение от рони (Сообщение 464257)
:write: зачем проверять лишнее ...
for (var i=2;i<x;i++){
for (var i=2;i<=Math.sqrt(x);i++){

Можете объяснить, почему вы корень тут извлекли?

Alexandroppolus 07.02.2020 13:25

Цитата:

Сообщение от RuBrain (Сообщение 519762)
Можете объяснить, почему вы корень тут извлекли?

нет смысла проверять делимость на числа, более крупные чем корень, ибо если среди них есть делитель, то парный ему делитель меньше корня, и мы бы на него наткнулись.

я бы ещё слегка ускорил
function isPrime(num) {
  if (num < 2 || num % 2 === 0) return false;
  for (var i = 3, sqrt = Math.sqrt(x); i <= sqrt; i += 2) {
    if (num % i === 0) return false;
  }
  return true;
}

рони 07.02.2020 13:26

RuBrain,
предположим число 9, нет смысла искать делитель больше 3, три это корень из 9, максимальный делитель числа - это его квадратный корень!

Malleys 08.02.2020 10:23

Alexandroppolus, откуда x на строке №3? Разве число 2 — составное?

function isPrime(num) {
	if(
		num < 2 ||
		num > 2 && num % 2 === 0 ||
		num > 3 && num % 3 === 0 ||
		num > 6 && (num - 1) % 6 !== 0 && (num + 1) % 6 !== 0
	) return false;

	for(var i = 6, sqrt = 1 + Math.sqrt(num); i <= sqrt; i += 6)
		if(num % (i - 1) === 0 || num % (i + 1) === 0) return false;

	return true;
}


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