#include <bits/stdc++.h>
using namespace std;
const int N = 1000005;
int n;
int p[N], cnt;
bool st[N];
void get_primes()
{
st[0] = st[1] = 1;
for (int i = 2; i <= N; i ++ )
{
if (!st[i]) p[cnt ++ ] = i;
for (int j = 0; i * p[j] <= N; j ++ )
{
st[i * p[j]] = 1;
if (i % p[j] == 0) break;
}
}
}
int main()
{
get_primes();
while (cin >> n, n)
{
for (int i = 0; i < n; i ++ )
if (!st[i] && !st[n - i])
{
printf("%d = %d + %d\n", n, i, n - i);
break;
}
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
int n;
int p[N], cnt;
bool st[N];
void get_prime(int n)
{
st[0] = 1; st[1] = 1;
for (int i = 2; i <= n; i++ )
{
if (!st[i]) p[cnt ++ ] = i;
for (int j = 0; p[j] * i <= n; j ++ )
{
st[i * p[j]] = 1;
if (i % p[j] == 0) break;
}
}
}
int main()
{
cin >> n;
get_prime(n + 1);
if (n > 3) cout << 2 << endl;
else cout << 1 << endl;
for (int i = 2; i <= n + 1; i ++ )
if (!st[i]) printf("%d ", 1);
else printf("%d ", 2);
}
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1000010;
int p[N], cnt;
bool st[N];
bool vis[N];
void init()
{
for (int i = 2; i <= N; i ++ )
{
if (!st[i]) p[cnt ++ ] = i;
for (int j = 0; p[j] * i <= N; j ++ )
{
st[i * p[j]] = 1;
if (i % p[j] == 0) break;
}
}
}
int w[N];
int main()
{
init();
// for (int j = 0; j < cnt; j ++ ) cout << p[j] << " ";
// cout << endl;
int l, r;
while (cin >> l >> r)
{
memset(vis, 0, sizeof vis);
for (int i = 0; i < cnt; i ++ )
{
ll pp = p[i];
for (ll j = max(2 * pp, (l + pp - 1) / pp * pp); j <= r; j += pp )
vis[j - l] = true;
}
int tot = 0;
for (int i = 0; i <= r - l;i ++ )
if (!vis[i] && i + l >= 2)
w[tot ++ ] = i + l;
if (tot < 2) puts("There are no adjacent primes.");
else
{
int mi = 0, mx = 0;
for (int i = 0; i + 1 < tot; i ++ )
{
int d = w[i + 1] - w[i];
if (d < w[mi + 1] - w[mi]) mi = i;
if (d > w[mx + 1] - w[mx]) mx = i;
}
printf("%d,%d are closest, %d,%d are most distant.\n", w[mi], w[mi + 1], w[mx], w[mx + 1]);
}
// for (int i = l; i <= r; i ++ )
// cout << vis[i - l] << " ";
// cout << endl;
// int start = l, last = l;
// int a = 2e9, b = -2e9;
// for (int i = l + 1; i <= r; i ++ )
// {
// if (!vis[i - l] && !vis[start - l] && a > i - start + 1)
// {
// a = i - start + 1;
// start = i;
// }
// if (!vis[i - l] && !vis[last - l] && b < i - last + 1)
// {
// b = i - last + 1;
// last = i;
// }
// }
// // cout << a << endl;
// if (a == 2e9) puts("There are no adjacent primes.");
// else printf("%d,%d are closest, %d,%d are most distant.\n", start - a + 1, start, last - b + 1, last);
}
}