Можно линейным решетом. Зная min_prime, там парочка несложных ДП возникает
У меня получается что то не с линейным решетом за 5,5 с. Я считаю минимальный простой делитель, после по определению phi(ab) = phi(a) * phi(b), делю составное число на максимальную степень простого (res), чтобы получить два взаимно простых числа и вычисляю как phi[i] = phi[i/res] * phi[res]
Как это можно развить?