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

Ended

Participants:1323

Verdict:Accepted
Score:100 / 100
Submitted:2017-04-02 13:42:36

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>
using namespace std;
const int MaxPrimeNum = 88499, MaxSize = 1000001, MaxSize1 = 31251;
int MinPrime[MaxSize], MaxPrime[MaxSize];       //MaxSizeprimeindex      //MaxPrimebitprimePrime
int prime[MaxPrimeNum];
bool is_prime[MaxSize];
//nprimeindex1num_prime-1 
//nMaxPrimeMinPrime
//O(n)
int i, j, len, num_prime = 1, tmpMaxIndex, tmp;
void euler_sieve(int n)
{
    i = 2;
    prime[len = tmpMaxIndex = MaxPrime[i] = MinPrime[i] = num_prime++] = i;
    is_prime[i] = true;
    for (i = 3; i < n; i += 2)
    {
        if (!MinPrime[i])
        {
            prime[len = tmpMaxIndex = MaxPrime[i] = MinPrime[i] = num_prime++] = i;
            is_prime[i] = true;
        }
        else
        {
            tmpMaxIndex = MaxPrime[i];
            len = MinPrime[i];
        }
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX