Я пытаюсь создать программу, которая ищет следующее простое число и добавляет его в список в текстовом файле.
Похоже, ваша программа пытается найти все простых чисел вплоть до введенного пользователем максимума, учитывая входной список простых чисел. Одним из относительно простых подходов к этому было бы использование сита с простыми числами, такого как Сито Эратосфена . Если вы можете предположить, что во входном файле не пропущены какие-либо простые числа в пределах диапазона, который он охватывает, то вы можете использовать его содержимое (по крайней мере, те, которые не превышают sqrt(nmax)
) для частичной или полной инициализации сита. Вы захотите динамически распределять память для самого сита.
Это будет более эффективно, чем выполнение независимого теста на простоту (любого полезного вида) для каждого кандидата в целевом диапазоне. Поскольку вы изначально ограничиваете себя числами, представленными типом int
, объем доступной памяти, вероятно, не является ограничивающим фактором, по крайней мере для настольного компьютера общего назначения, ноутбука или серверного компьютера.
Что касается ввода / вывода, вам нужно прочитать весь файл один раз, и вы должны написать каждое новое простое число, которое вы найдете. Обойти это невозможно. Но не делайте больше операций ввода-вывода, чем нужно. В частности, вам не нужно читать файл более одного раза, и, прочитав его до конца, вам не нужно искать в нем перед записью. Однако имеет смысл отложить чтение до тех пор, пока вы не введете nmax
и не выделите массив sieve, интегрируя его с вашей реализацией sieve.
Обратите внимание, что если вы хотите найти только одно следующее простое число, тогда другой подход может быть более разумным.