diff --git a/bjtu/1996/1996.cpp b/bjtu/1996/1996.cpp new file mode 100644 index 00000000..fcefbae2 --- /dev/null +++ b/bjtu/1996/1996.cpp @@ -0,0 +1,64 @@ +#include +#include +#include + +using std::cin; +using std::cout; +const char endl = '\n'; + +bool is_prime(int x) { + if (x <= 1) return false; + + for (int i = 2; i * i <= x; i++) { + if (x % i == 0) { + return false; + } + } + + return true; +} + +int main() { + std::ios::sync_with_stdio(false); + cin.tie(nullptr); + + int n, t; + std::vector p; + + cin >> n; + + if (is_prime(n)) { + cout << "NO" << endl; + + exit(0); + } + + t = n; + + for (int i = 2; i * i <= t; i++) { + while (t % i == 0) { + p.emplace_back(i); + t /= i; + } + } + + if (t > 1) p.emplace_back(t); + + int sum = std::accumulate(p.begin(), p.end(), 0); + + cout << "YES" << endl + << static_cast(p.size()) + (n - sum) << endl; + + for (const int& x : p) { + cout << x << ' '; + } + + while (sum < n) { + cout << 1 << ' '; + sum++; + } + + cout << endl; + + return 0; +}