#include <iostream>
#include <bitset>
using namespace std;
using u64 = uint64_t;
using u128 = __uint128_t;
const int MAX = 100000;
bitset<MAX + 1> is_not_prime;
void sieve() {
is_not_prime[0] = is_not_prime[1] = true;
for (int i = 2; i * i <= MAX; ++i) {
if (!is_not_prime[i]) {
for (int j = i * i; j <= MAX; j += i)
is_not_prime[j] = true;
}
}
}
u64 power(u64 a, u64 b, u64 mod) {
u64 res = 1;
a %= mod;
while (b) {
if (b & 1) res = (u128)res * a % mod;
a = (u128)a * a % mod;
b >>= 1;
}
return res;
}
bool miller_rabin(u64 n, u64 a) {
if (n % a == 0) return false;
u64 d = n - 1;
while (d % 2 == 0) {
u64 x = power(a, d, n);
if (x == n - 1) return true;
if (x != 1) return false;
d /= 2;
}
u64 x = power(a, d, n);
return x == 1 || x == n - 1;
}
bool is_prime(u64 n) {
if (n <= MAX) return !is_not_prime[n];
if (n % 2 == 0 || n < 2) return false;
u64 bases[] = {2, 3};
for (u64 a : bases) {
if (n == a) continue;
if (!miller_rabin(n, a)) return false;
}
return true;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
sieve(); // 預處理小質數
int n;
while (cin >> n && n != 0) {
cout << (is_prime(n) ? 0 : 1) << '\n';
}
}