Нахождение наибольшего простого делителя?
Число 600851475143  превышает 4 байта.
Если брать только 4 байта от этого числа, то получается число -443946297, которое как раз и делится на 3 и на 29.
То есть у вас программа работает только с четырёхбайтными числами.
Хм. str_repeat полностью сбивает с толку - это очень интересное решение) но совершенно не адекватное.
Для хранения списка простых чисел - используйте массив (array) этих самых чисел :)
Лучше вооружитесь книжкой по языку и возьмите самый тупой алгоритм разложения на простые множители - тот в котором делим (если делится, конечно) число на все числа начиная с 2, пока оно не станет равным 1.
А понять, где у вас не правильно вы можете сами - выберите число поменьше и реализуйте ваш алгоритм сами на бумажке.