В данном решении перебор претендентов и проверка на простоту объединены в один код.
Проверка на простоту - простая, из задачи на проверку на простоту (1), соответственно, неэффективная.
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int x;
cin >> x;
int count = 0;
int xp, i;
while (x > 1) {
xp = 2;
while (xp <= x)
{
bool isPrime = true;
if (xp == 2) {
isPrime = true;
count++;
}
else if (xp % 2 == 0) {
isPrime = false;
i = 2;
count++;
}
else {
for (i = 3; i < xp; i += 2)
{
count++;
if (xp % i == 0) {
isPrime = false;
break;
}
}
}
if (isPrime) {
if (x % xp == 0) {
x /= xp;
break;
}
else {
xp++;
}
}
else {
xp++;
}
}
cout << xp << " ";
}
cout << endl;
cout << "count = " << count << endl;
system("pause");
return 0;
}