C программа ничего не выводит

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

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

long long n = 600851475143;
long long largest = 0;

int prime(long long c);

int main()
{
  for (long long i = 0; i < n; i++)
  {
    if (n % i == 0 && prime(i) == 0)
    {
      largest = i;
    }
  }
  printf("%ll\n", largest);
  return 0;
}

int prime(long long c)
{
  for (long long j = 0; j < c; j++)
  {
    if (c % j == 0)
    {
      return 1;
    }
  }
  return 0;
}

Программа компилируется без каких-либо ошибок или предупреждений, но когда я запускаю программу, кажется, что она работает в течение нескольких секунд, но затем завершается, ничего не выводя, даже несмотря на то, что в конце main есть оператор printf. Я в Windows использую MinGW и gcc, если это поможет.

Вы должны подумать о делении на простые множители по мере их нахождения (неоднократно, если число имеет один и тот же простой множитель несколько раз (как в 9 имеет 3 в качестве множителя, дважды). Это уменьшает количество необходимых тестов. Есть много простых шагов, которые вы можете предпринять, чтобы значительно улучшить производительность функции prime(), начиная с использования условия j * j <= c вместо j < c.

Jonathan Leffler 09.02.2019 21:09

Каков статус выхода программы? т.е. что говорит ваша оболочка, если вы вызываете «echo $?» в окне оболочки MinGW?

Louis Langholtz 09.02.2019 21:11

Прочтите как отлаживать небольшие программы и про тест на простоту

Basile Starynkevitch 09.02.2019 21:13

Разве вы не получаете исключение «деление на ноль» в prime() из-за: for (long long j = 0; j < c; j++) { if (c % j == 0) На первой итерации j равен 0, поэтому вы делите на 0, а целочисленное деление на ноль определенно является Плохой Вещью™. Вы должны начинать цикл с 2, а не с 0. Даже если у вас не возникает проблем с делением на ноль, вы также пытаетесь разделить на 1, и каждое целое число, кроме 0, оставляет нулевой остаток при делении на 1. Однако отсутствие результата настоятельно указывает на ошибку деления на ноль.

Jonathan Leffler 09.02.2019 21:13

Ваш код скомпилирован, но когда я его запустил, я получил «Исключение с плавающей запятой». Вы должны где-то делить на 0.

Manny_Mar 09.02.2019 21:26

Попробуйте начать цикл for с 2! Алгоритмы, которые вы используете, не самые лучшие из возможных. Вы можете настроить prime, учитывая, что, кроме 2, делители нечетные, и, кроме того, поиск делителя может быть предпринят до квадратного корня из n... (просто для начала иметь более мощный код).

Sir Jo Black 10.02.2019 00:07

Код ничего не отображает, потому что он завершается из-за деления на 0!

Sir Jo Black 10.02.2019 00:13

Спасибо, с улучшением производительности функции простого числа и отсутствием деления на 0 программа работает так, как предполагалось.

M. Jagger 10.02.2019 10:01
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
8
104
0

Другие вопросы по теме