/* -*- coding: utf-8 -*- * * 3536.cc: No.3536 LCM+ELEMENT=SUM - yukicoder */ #include #include #include #include using namespace std; /* constant */ const int PFN = 496; const int MIN_N = 10; const int MAX_N = 100000; const int MIN_A = 1; const int MAX_A = 100000; /* typedef */ /* global variables */ int as[MAX_N]; /* subroutines */ bool check(int n, int as[]) { if (n < MIN_N || n > MAX_N) return false; int sum = 0, l = 1; for (int i = 0; i < n; i++) { if (as[i] < MIN_A || as[i] > MAX_A) return false; sum += as[i]; l = lcm(l, as[i]); } int maxa = *max_element(as, as + n); //printf(" lcm=%d, maxa=%d, sum=%d\n", l, maxa, sum); return l + maxa == sum; } /* main */ int main() { int n = 0; for (int p = 1; p * p <= PFN; p++) if (PFN % p == 0) { as[n++] = p; int q = PFN / p; if (q != p) as[n++] = q; } sort(as, as + n); assert(check(n, as)); printf("%d\n", n); for (int i = 0; i < n; i++) printf("%d%c", as[i], (i + 1 < n) ? ' ' : '\n'); return 0; }