// UVa 10948 - The primary problem #include <stdio.h> #include <string.h> #include <vector> using namespace std; bool isprime[1000001]; vector<int> prime; int main() { // sieve memset(isprime, true, sizeof(isprime)); for (int i = 4; i <= 1000000; i += 2) isprime[i] = false; prime.push_back(2); for (int i = 3; i <= 1000; i += 2) if (isprime[i]) { prime.push_back(i); for (int j = i * i; j <= 1000000; j += (i << 1)) isprime[j] = false; } for (int i = 1001; i < 1000000; i += 2) if (isprime[i]) prime.push_back(i); while (true) { // input int n; scanf("%d", &n); if (n == 0) break; printf("%d:\n", n); bool found = false; for (int i = 0; i < prime.size() && (prime[i] << 1) <= n; i++) if (isprime[n - prime[i]]) { printf("%d+%d\n", prime[i], n - prime[i]); found = true; break; } if (!found) printf("NO WAY!\n"); // output } return 0; }
Friday, May 15, 2015
UVa 10948 - The primary problem
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment