Fast linear sieve seeking prime issue

NO1

Rapid screening seeking linearity problem primes (Euler sieve)

 

Features: There is no redundancy, repeat screening is not a number. Time complexity almost O (n).

How it works: For any composite number, there must be a minimum quality factor multiplied by the decomposition of the biggest factors in the way. Thus, for each composite number, as long as the largest factor sieve again, as long as the enumeration to enumerate a minimum quality factor.

. 1 #include <the iostream>
 2  #define MAXN 1000010
 . 3  the using  namespace STD;
 . 4  Long Prime [MAXN], number_prime; // Prime is the set of prime numbers, number_prime is the number of prime numbers
 . 5  BOOL VIS [MAXN]; // with VIS the recording that number is not a prime number
 . 6 inline void pd_prime ( int number) // number is the required set of prime numbers limit
 . 7  {
 . 8      for ( int I = 2 ; I <= number; I ++ )
 . 9      {
 10          IF ! (VIS [I ]) prime [number_prime ++] = I; // if it is determined not within the set of prime numbers is a non-prime number - and number + 1 (in this case, assignment to another number +1, hence prime sequence begins with 0)
. 11          for ( int J = 0 ; J <number_prime Prime && * I [J] <= Number; J ++ ) // J is less than the number of prime numbers is now seeking out, and the number of the next screen (i * has a known prime numbers less than the upper limit claimed)
 12 is          {
 13 is              VIS [i * prime [J]] = to true ; // can be split into i * prime number is a composite number screening out
 14              IF (! (I% prime [J])) BREAK ; // see Note I% Prime. 1 [J] == 0
 15          }
 16      }
 . 17  }
 18 is  int main ()
 . 19  {
 20 is      int n-;
 21 is      CIN >> n-;
 22 is      pd_prime (n-);
 23 is      for ( int i=0;i<number_prime;i++) cout<<prime[i]<<endl;
24     cout<<endl<<"total number: "<<number_prime;
25     return 0;
26 }

Note 1: Only the minimum quality factor sieve

eg: 12=2*2*3

When i = 4, 2 to 4 * Filtered stop ---

......

When i = 6, 2 to 6 * 6 * 3 Filtered Filtered --- --- stop

12 is the smallest prime factors 2, only when the screen again for i = 2

If i = p1 * p2 * ...... * pn p2 * ...... * pn set as the only screening q x = i * p1 i.e. x = p1 * p1 * q. The number of remaining engaged: x2 = p2 * p1 * q = (p2 * p2 * ...... * pn) * p1; when i = (p2 * p2 * ...... * pn) Nature It will be screened out.

Guess you like

Origin www.cnblogs.com/cyncy/p/12081265.html