#include <iostream>
#include <cmath>
#include <vector>
void sieve(int ubound, int primes[]);
int main()
{
long long n;
int i;
std::cout << "Input Number: ";
std::cin >> n;
if (n < 2){
return 1;
}
long long upperbound = n;
std::vector<int> A(upperbound);
int SquareRoot = sqrt(upperbound);
sieve(upperbound, A.data());
for (i = 0; i < upperbound; i++)
{
if (A[i] == 1 && upperbound%i == 0)
{
std::cout << " " << i << " ";
}
}
return 0;
}
void sieve(int ubound, int primes[])
{
long long i, j, m;
for (i = 0; i < ubound; i++)
{
primes[i] = 1;
}
primes[0] = 0, primes[1] = 0;
for (i = 2; i < ubound; i++)
{
for (j = i*i; j < ubound; j += i)
{
primes[j] = 0;
}
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDx2ZWN0b3I+Cgp2b2lkIHNpZXZlKGludCB1Ym91bmQsIGludCBwcmltZXNbXSk7CgppbnQgbWFpbigpCnsKICAgIGxvbmcgbG9uZyBuOwogICAgaW50IGk7CiAgICBzdGQ6OmNvdXQgPDwgIklucHV0IE51bWJlcjogIjsKICAgIHN0ZDo6Y2luID4+IG47CiAgICBpZiAobiA8IDIpewogICAgICAgIHJldHVybiAxOwogICAgfQogICAgbG9uZyBsb25nIHVwcGVyYm91bmQgPSBuOwogICAgc3RkOjp2ZWN0b3I8aW50PiBBKHVwcGVyYm91bmQpOwogICAgaW50IFNxdWFyZVJvb3QgPSBzcXJ0KHVwcGVyYm91bmQpOwogICAgc2lldmUodXBwZXJib3VuZCwgQS5kYXRhKCkpOwogICAgZm9yIChpID0gMDsgaSA8IHVwcGVyYm91bmQ7IGkrKykKICAgIHsKICAgICAgICBpZiAoQVtpXSA9PSAxICYmIHVwcGVyYm91bmQlaSA9PSAwKQogICAgICAgIHsKICAgICAgICAgICAgc3RkOjpjb3V0IDw8ICIgIiA8PCBpIDw8ICIgIjsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gMDsKfQoKdm9pZCBzaWV2ZShpbnQgdWJvdW5kLCBpbnQgcHJpbWVzW10pCnsKICAgIGxvbmcgbG9uZyBpLCBqLCBtOwogICAgZm9yIChpID0gMDsgaSA8IHVib3VuZDsgaSsrKQogICAgewogICAgICAgIHByaW1lc1tpXSA9IDE7CgogICAgfQogICAgcHJpbWVzWzBdID0gMCwgcHJpbWVzWzFdID0gMDsKICAgIGZvciAoaSA9IDI7IGkgPCB1Ym91bmQ7IGkrKykKICAgIHsKICAgICAgICBmb3IgKGogPSBpKmk7IGogPCB1Ym91bmQ7IGogKz0gaSkKICAgICAgICB7CiAgICAgICAgICAgIHByaW1lc1tqXSA9IDA7CiAgICAgICAgfQogICAgfQp9Cg==