Программу можно сделать быстрее, изменив for(int i=2; n!=1;){
на for(int i=2; i*i <= n;){
.Это прекращает поиск факторов, когда n
меньше квадрата текущего фактора-кандидата.После этой точки не может быть никаких простых факторов, кроме самого n
, поскольку, если бы j
был основным фактором больше i
, то n/j
был бы фактором меньше i
.Но такой фактор был бы извлечен из n
ранее в цикле.
Поскольку это означает, что цикл может завершиться с n
, являющимся основным фактором, необходимо вставить некоторый код после цикла, чтобыпроверить, больше ли n
, чем 1, и, если это так, скорректировать totalFactor
и primeFactor
соответственно.
Программу также можно ускорить, проверяя только простые числа в качестве подходящих факторов вместо проверки каждого целого числаот 2 доОбратите внимание, что поскольку программа должна поддерживать числа до 2 000 000, а новый цикл остановится на квадратном корне из n
, необходимы только простые числа до 1414.Список таких простых чисел можно легко подготовить заранее.