Найти наибольшее простое число ниже входного значения - PullRequest
0 голосов
/ 24 октября 2019

Позвольте мне начать с того, что я начинающий. Я пытаюсь определить функцию, которая вычисляет / идентифицирует наибольшее простое число ниже входного значения. Тем не менее, мой нынешний подход имеет недостатки.

Я пытался реализовать вложенный цикл for. Генерация чисел от одного под входом до 1, после чего каждый номер проходит через второй цикл, чтобы определить, является ли оно простым. Если это простое число (если count == 2), функция должна возвращать число, сгенерированное первым циклом (n)

Мне разрешено предполагать, что входное значение будет положительным целым числомбольше 2.

int prime(int maximum)
{
int i, j, count = 0, n;

for (i = 1; i < maximum; i++) {
        n = maximum - i; /* generating number below input value*/ 
        for (j = 1; j <= maximum; j++) {
            if (n % j == 0) { /* testing whether or not it is prime */
                count++;
            } 
        } if(count == 2) {
                break;
            } 
    } 
    return n;
}

Я ожидаю, что на входе 10 будет выводиться 7, на входе 30 - 29, а на входе 100 - 97.

Однако, функция в настоящее время генерирует вывод 1 - последовательно.

Код не генерирует никаких сообщений об ошибках

примечание: я впервые использую эту платформу, мои самые искренние извинения, если формат моего вопроса неверен

1 Ответ

0 голосов
/ 24 октября 2019

Проблема в том, что вы not resetting the count to 0 во внешнем цикле.
Это решит проблему.

Добавление далее. В коде можно выполнить и другие оптимизации.

Вам не нужно запускать внутренний цикл maximum раз, only n times будет достаточно для проверки whether n is prime or not.

Вы можете поставить break condition inside the inner for loop для тех, чей счет пересек2, чтобы избежать дальнейших итераций.

int prime(int maximum)
{
int i, j, count = 0, n;

for (i = 1; i < maximum; i++) {
        count = 0;  # <-----  Reset it to 0.
        n = maximum - i; /* generating number below input value*/ 
        for (j = 1; j <= n; j++) {
            if (n % j == 0) { /* testing whether or not it is prime */
                count++;
                if(count > 2) # to avoid further iterations as we know, this number is not prime.
                   break;
            } 
        } if(count == 2) {
                break;
            } 
    } 
    return n;
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...