Расчет количества простых чисел в интервале

115
24 июня 2021, 19:10

Задание - посчитать количество простых чисел от 2 до х, используя вложенный цикл for + for. Помогите доработать код, тест-методы со значениями finish = 2 и finish = 11 - выполняются, а со значением 5 - нет

public class PrimeNumber {
 public int calc(int finish) {
    int count = 0;
    boolean isPrime;
    if (!(finish == 2)) {
        for (count = 2; count <= finish; count++) {
            isPrime = true;
            for (int j = 2; j <= Math.sqrt(count); j++) {
                if ((count % j) == 0) {
                    isPrime = false;
                }
                else  {
                    return count;
                }
            }
        }
    } else {
        return 1;
    }
    return count;
}
}
Answer 1

function calc(finish) { 
  var result = 0; 
 
  for (var count = 2; count <= finish; count++) { 
    var isPrime = true; 
    for (var j = 2; j <= Math.sqrt(count); j++) { 
      if (count % j == 0) { 
        isPrime = false; 
        break; 
      } 
    } 
    if (isPrime) 
      result++; 
  } 
 
  return result; 
} 
console.log(calc(2)); 
console.log(calc(5)); 
console.log(calc(100));

Answer 2

Я бы несколько ускорил код @Igor - ну, не вижу смысла проверять четные числа на делимость, и проверять делимость на четные числа. А раз минимальное число диапазона - 2, то это 2 можно вынести отдельно...

    function calc(finish) { 
      var result = 1; 
     
      for (var count = 3; count <= finish; count+=2) { 
        var isPrime = true; 
        for (var j = 3; j*j <= count; j+=2) { 
          if (count % j == 0) { 
            isPrime = false; 
            break; 
          } 
        } 
        if (isPrime) 
          result++; 
      } 
      return result; 
    } 
    console.log(calc(2)); 
    console.log(calc(5)); 
    console.log(calc(100));

А, да, на Java - вроде бы так:

public class PrimeNumber {
    public int calc(int finish)
    {
        int result = 1;
        for(int count = 3; count <= finish; count += 2)
        {
            boolean isPrime = true;
            for(int j = 3; j*j <= count; j+=2)
            {
                if (count % j == 0) {
                    isPrime = false;
                    break;
                }
            }
            if (isPrime) ++result;
        }
        return result;
    }
}
READ ALSO
статический импорт

статический импорт

решил немного побаловаться статическим импортом, в смысле немного поэкспериментировать

148
Биометрическая авторизация

Биометрическая авторизация

1) Возможно ли обойтись без диалога? У нас своеобразный дизайн под данную авторизацию2) Как можно настроить стиль для данного диалога? Цвет...

193
Runtime Permissions

Runtime Permissions

Пытаюсь сделать скриншот по нажатию кнопки следующим образом:

154
Как заполнить ArrayList массивами?

Как заполнить ArrayList массивами?

Есть текстовый файл, в который записаны числа (каждое с новой строки) в таком формате: 1075 5018 6542 1456 и тд Хочу создать ArrayList массивов и каждый...

124