// 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