Оптимизировать программу с тем, чтобы могла работать почти с любыми большими значениями, так как после введеиня иксов величинами свыше 200 000 000, программа дополняет тройки всякой ерундой, в ҡонце. Не принципиально, но значит где-то вылезает ошибка кода.
Разумеется ошибка вылезает в
Sqr(x), потому что при x>46340 результат возведения в квадрат больше максимально представимого числа в формате integer.
И кстати замена integer на int64 и даже BigInteger не спасёт: тогда деление
Sqr(x)/k для k<6 и при x>3e8 будет возвращать число, которое после деления на 2 в любом случае будет иметь нулевую дробную часть, просто потому что она не умещается в 54 бита мантиссы типа real.
Про одинаковую чётность x и k уже написали.
Для деления вместо / надо использовать div.
Для проверки на делимость (т.е. будет ли дробная часть после деления) использовать mod.
Как именно - изучайте справку по операциям.
Это если не трогать сам алгоритм, потому что иначе его надо чуть ли не весь выкинуть и сделать по другому - например как описал
Booker48. И факторизация - разложение на простые множители, действие достаточно стандартное, хоть и не реализуемое одной какой-то функцией в паскале.