#include <stdio.h>
int main()
{
int i,j;
const int N = 20000000;
const int CNT_PRIMES = N; // upper bound on number of primes within range from 1 to N
int smallest_divisor[N];
int sigma[N];
int sum_proper[N];
int primes[CNT_PRIMES];
int curcnt = 0;
for (i = 2; i < N; ++i)
smallest_divisor[i] = i;
for ( i = 2; i < N; ++i)
{
if (smallest_divisor[i] == i)
primes[curcnt++] = i;
for (j = 0; j < curcnt && primes[j] <= smallest_divisor[i] && primes[j] * i < N; ++j)
smallest_divisor[primes[j] * i] = primes[j];
}
sigma[1] = 1;
for (i = 2; i < N; ++i)
{
int cur = i;
int p = smallest_divisor[i];
int k = 0;
while (cur % p == 0)
cur /= p, ++k;
int pk = i / cur;
sigma[i] = (pk * p - 1) / (p - 1); // sigma(p^k) = 1 + p + ... + p^k = (p^(k+1) - 1) / (p - 1)
sigma[i] *= sigma[cur];
sum_proper[i] = sigma[i] - i;
}
for (i = 2; i < N; ++i)
{
int j = sum_proper[i];
if (j < N && j > i && sum_proper[j] == i)
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgoKCmludCBtYWluKCkKewoJaW50IGksajsKCWNvbnN0IGludCBOID0gMjAwMDAwMDA7Cgljb25zdCBpbnQgQ05UX1BSSU1FUyA9IE47IC8vIHVwcGVyIGJvdW5kIG9uIG51bWJlciBvZiBwcmltZXMgd2l0aGluIHJhbmdlIGZyb20gMSB0byBOCgkKCWludCBzbWFsbGVzdF9kaXZpc29yW05dOwoJaW50IHNpZ21hW05dOwoJaW50IHN1bV9wcm9wZXJbTl07CglpbnQgcHJpbWVzW0NOVF9QUklNRVNdOwoJaW50IGN1cmNudCA9IDA7Cglmb3IgKGkgPSAyOyBpIDwgTjsgKytpKQogICAgICAgIHNtYWxsZXN0X2Rpdmlzb3JbaV0gPSBpOwogICAgZm9yICggaSA9IDI7IGkgPCBOOyArK2kpCiAgICB7CiAgICAgICAgaWYgKHNtYWxsZXN0X2Rpdmlzb3JbaV0gPT0gaSkKICAgICAgICAgICAgcHJpbWVzW2N1cmNudCsrXSA9IGk7CiAgICAgICAgZm9yIChqID0gMDsgaiA8IGN1cmNudCAmJiBwcmltZXNbal0gPD0gc21hbGxlc3RfZGl2aXNvcltpXSAmJiBwcmltZXNbal0gKiBpIDwgTjsgKytqKQogICAgICAgICAgICBzbWFsbGVzdF9kaXZpc29yW3ByaW1lc1tqXSAqIGldID0gcHJpbWVzW2pdOwogICAgfQogICAgc2lnbWFbMV0gPSAxOwogICAgZm9yIChpID0gMjsgaSA8IE47ICsraSkKICAgIHsKICAgICAgICBpbnQgY3VyID0gaTsKICAgICAgICBpbnQgcCA9IHNtYWxsZXN0X2Rpdmlzb3JbaV07CiAgICAgICAgaW50IGsgPSAwOwogICAgICAgIHdoaWxlIChjdXIgJSBwID09IDApCiAgICAgICAgICAgIGN1ciAvPSBwLCArK2s7CiAgICAgICAgaW50IHBrID0gaSAvIGN1cjsKICAgICAgICBzaWdtYVtpXSA9IChwayAqIHAgLSAxKSAvIChwIC0gMSk7IC8vIHNpZ21hKHBeaykgPSAxICsgcCArIC4uLiArIHBeayA9IChwXihrKzEpIC0gMSkgLyAocCAtIDEpCiAgICAgICAgc2lnbWFbaV0gKj0gc2lnbWFbY3VyXTsKICAgICAgICBzdW1fcHJvcGVyW2ldID0gc2lnbWFbaV0gLSBpOwogICAgfQogICAgZm9yIChpID0gMjsgaSA8IE47ICsraSkKICAgIHsKICAgICAgICBpbnQgaiA9IHN1bV9wcm9wZXJbaV07CiAgICAgICAgaWYgKGogPCBOICYmIGogPiBpICYmIHN1bV9wcm9wZXJbal0gPT0gaSkKICAgICAgICAgICAgcHJpbnRmKCIlZFx0XHQlZFxuIiwgaSwgaik7CiAgICB9CiAgICByZXR1cm4gMDsKfQ==