[Offer收割]编程练习赛12 register

Ended

Participants:1323

Verdict:Accepted
Score:100 / 100
Submitted:2017-04-02 12:22:33

Lang:G++

Edit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
#define MAXN 1000000 /** prime_table[i]==1  i , 0  */
int prime_table[MAXN+1];
void compute_prime_table() { 
    int i, j;
    const int upper = sqrt(MAXN);
    for (i = 2; i <= MAXN; i++) prime_table[i] = 1; 
    prime_table[0] = 0;
    prime_table[1] = 0;
    for (i = 2; i < upper; i++) 
        if(prime_table[i]) { 
            for (j = 2; j * i <= MAXN; j++) prime_table[j*i] = 0;
    }
}
int is_prime(unsigned int n) {
    return prime_table[n]; 
}
int main() {
    int N;
    cin >> N;
    compute_prime_table();
    for (int i = 2; i <= N / 2; ++i) {
        if (is_prime(i) && is_prime(N - i)) {
            cout << i << " " << N - i << endl;
            return 0;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX