// yukicoder: No.689 E869120 and Constructing Array 3 // 2019.7.12 bal4u #include #include #if 1 #define gc() getchar_unlocked() #define pc(c) putchar_unlocked(c) #else #define gc() getchar() #define pc(c) putchar(c) #endif int in() { // 非負整数の入力 int n = 0, c = gc(); do n = 10 * n + (c & 0xf); while ((c = gc()) >= '0'); return n; } void out(int n) { // 正整数の表示(出力) int i; char b[20]; i = 0; while (n) b[i++] = n % 10 + '0', n /= 10; while (i--) pc(b[i]); } int prime = 24281; // 24251 24281 24317 int sp; int a[20], sz, sa; void outs(int n, int v) { while (n--) { if (!sp) sp = 1; else pc(' '); out(v); } } #if 1 int main() { int i, k, K; K = in(); if (K == 0) { pc('1'), pc('\n'); return 0; } while (K) { k = (int)sqrt((double)K); a[sz++] = k, sa += k, K -= k*k; } out(sa << 1), pc('\n'); k = 0; for (i = 0; i < sz; i++) { k += 2; outs(a[i], k), outs(a[i], prime-k); } pc('\n'); return 0; } #else #define MAX 100005 #define SQRT 316 char notPrime[MAX] = { 1,1,0,0,1 }; // zero: if prime void sieve() { int i, j; for (i = 3; i <= SQRT; i += 2) { if (!notPrime[i]) { for (j = i * i; j <= MAX; j += i) notPrime[j] = 1; } } } int A[300]; int main() { int i, j, ans, K, s; sieve(); scanf("%d", &K); for (i = 0; i < K; i++) scanf("%d", A+i); ans = 0; for (i = 0; i < K; i++) for (j = i+1; j < K; j++) { s = A[i] + A[j]; if ((s & 1) && notPrime[s] == 0) ans++; } printf("ans=%d\n", ans); return 0; } #endif #if 0 int main() { int i, j, k, ma, p; sieve(); i = 3, j = 5, ma = p = 0; for (k = 7; k < 30000; k+=2) { while (notPrime[k]) k += 2; if (j-i > ma && k-j > ma) { int a = j-i; if (k-j < a) a = k-j; ma = a; p = j; } i = j, j = k; } printf("prime=%d, range=%d\n", p, ma); return 0; } #endif