Во-первых.
Вместо
с = pow(i, 0.5)
используйтес= sqrt(i);
Во-вторых, закешируйте выражение с*с. Операция умножения дорогая.
В-третьих, у вас первый if работает только на первой итерации, в топку его, начинайте итерации с 2.
В-четветрых, если есть возможность, то надо использовать OpenMP, а еще лучше OpenCL
Это что касается техники программирования. Но мне кажется, что если покопать математику,. то можно изменить алгоритм.
О как, после переоформления вопроса я увидел саму задачу. Тогда однозначно стоит начинать перебор
с s*s, гдеint s =sqrt(n);