#include <stdio.h>
int main() {
int devemos_continuar = 1;
long n;
while (devemos_continuar) {
devemos_continuar
= scanf("%ld", &n
) != EOF
; if (devemos_continuar) {
// grossamente equivalente ao "p = (-1, -1, -1, -1)"
long prim1 = -1, prim2 = -1, prim3 = -1, prim4 = -1;
{
// bloco que determina se o número é soma dos quadrados de 4 primos consecutivos
long p1 = 2, p2 = 3, p3 = 5, p4 = 7;
long soma = p1*p1 + p2*p2 + p3*p3 + p4*p4;
// enquanto o próximo primo é válido, continua tentando...
while (prim1 == -1 && p4 != -1 && soma <= n) {
if (soma == n) {
// grossamente equivalente ao "p = (p1, p2, p3, p4)"
prim1 = p1;
prim2 = p2;
prim3 = p3;
prim4 = p4;
} else {
// não deu como soma destes primos consecutivos
// vamos rodar os números e tentar o próximo primo
p1 = p2;
p2 = p3;
p3 = p4;
// fazendo aqui o desenrolar da função proximo_primo
// começo do bloco equivalente à chamada a proximo_primo
{
long ret = -1;
long next = p4 + 2;
while (next < 10000 && ret == -1) {
long divisor;
for (divisor = 3; divisor*divisor < next && next % divisor != 0; divisor += 2);
if (next % divisor != 0) {
ret = next;
}
next += 2;
}
p4 = ret;
}
}
soma = p1*p1 + p2*p2 + p3*p3 + p4*p4;
}
}
if (prim1 != -1) {
printf("É a soma de alguns primos\n"); } else {
printf("impossível representar\n"); }
}
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgppbnQgbWFpbigpIHsKICBpbnQgZGV2ZW1vc19jb250aW51YXIgPSAxOwogIGxvbmcgbjsKICB3aGlsZSAoZGV2ZW1vc19jb250aW51YXIpIHsKICAgIGRldmVtb3NfY29udGludWFyID0gc2NhbmYoIiVsZCIsICZuKSAhPSBFT0Y7CiAgICBpZiAoZGV2ZW1vc19jb250aW51YXIpIHsKICAgICAgLy8gZ3Jvc3NhbWVudGUgZXF1aXZhbGVudGUgYW8gInAgPSAoLTEsIC0xLCAtMSwgLTEpIgogICAgICBsb25nIHByaW0xID0gLTEsIHByaW0yID0gLTEsIHByaW0zID0gLTEsIHByaW00ID0gLTE7CiAgICAgIHsKICAgICAgICAvLyBibG9jbyBxdWUgZGV0ZXJtaW5hIHNlIG8gbsO6bWVybyDDqSBzb21hIGRvcyBxdWFkcmFkb3MgZGUgNCBwcmltb3MgY29uc2VjdXRpdm9zCiAgICAgICAgbG9uZyBwMSA9IDIsIHAyID0gMywgcDMgPSA1LCBwNCA9IDc7CiAgICAgICAgbG9uZyBzb21hID0gcDEqcDEgKyBwMipwMiArIHAzKnAzICsgcDQqcDQ7CgogICAgICAgIC8vIGVucXVhbnRvIG8gcHLDs3hpbW8gcHJpbW8gw6kgdsOhbGlkbywgY29udGludWEgdGVudGFuZG8uLi4KICAgICAgICB3aGlsZSAocHJpbTEgPT0gLTEgJiYgcDQgIT0gLTEgJiYgc29tYSA8PSBuKSB7CiAgICAgICAgICBpZiAoc29tYSA9PSBuKSB7CiAgICAgICAgICAgIC8vIGdyb3NzYW1lbnRlIGVxdWl2YWxlbnRlIGFvICJwID0gKHAxLCBwMiwgcDMsIHA0KSIKICAgICAgICAgICAgcHJpbTEgPSBwMTsKICAgICAgICAgICAgcHJpbTIgPSBwMjsKICAgICAgICAgICAgcHJpbTMgPSBwMzsKICAgICAgICAgICAgcHJpbTQgPSBwNDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIG7Do28gZGV1IGNvbW8gc29tYSBkZXN0ZXMgcHJpbW9zIGNvbnNlY3V0aXZvcwogICAgICAgICAgICAvLyB2YW1vcyByb2RhciBvcyBuw7ptZXJvcyBlIHRlbnRhciBvIHByw7N4aW1vIHByaW1vCiAgICAgICAgICAgIHAxID0gcDI7CiAgICAgICAgICAgIHAyID0gcDM7CiAgICAgICAgICAgIHAzID0gcDQ7CiAgICAgICAgICAgIC8vIGZhemVuZG8gYXF1aSBvIGRlc2Vucm9sYXIgZGEgZnVuw6fDo28gcHJveGltb19wcmltbwoKICAgICAgICAgICAgLy8gY29tZcOnbyBkbyBibG9jbyBlcXVpdmFsZW50ZSDDoCBjaGFtYWRhIGEgcHJveGltb19wcmltbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbG9uZyByZXQgPSAtMTsKICAgICAgICAgICAgICBsb25nIG5leHQgPSBwNCArIDI7CiAgICAgICAgICAgICAgd2hpbGUgKG5leHQgPCAxMDAwMCAmJiByZXQgPT0gLTEpIHsKICAgICAgICAgICAgICAgIGxvbmcgZGl2aXNvcjsKICAgICAgICAgICAgICAgIGZvciAoZGl2aXNvciA9IDM7IGRpdmlzb3IqZGl2aXNvciA8IG5leHQgJiYgbmV4dCAlIGRpdmlzb3IgIT0gMDsgZGl2aXNvciArPSAyKTsKICAgICAgICAgICAgICAgIGlmIChuZXh0ICUgZGl2aXNvciAhPSAwKSB7CiAgICAgICAgICAgICAgICAgIHJldCA9IG5leHQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBuZXh0ICs9IDI7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHA0ID0gcmV0OwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBzb21hID0gcDEqcDEgKyBwMipwMiArIHAzKnAzICsgcDQqcDQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChwcmltMSAhPSAtMSkgewogICAgICAgIHByaW50Zigiw4kgYSBzb21hIGRlIGFsZ3VucyBwcmltb3NcbiIpOwogICAgICB9IGVsc2UgewogICAgICAgIHByaW50ZigiaW1wb3Nzw612ZWwgcmVwcmVzZW50YXJcbiIpOwogICAgICB9CiAgICB9CiAgfQogIHJldHVybiAwOwp9