Example #1
0
 Hash<TK>::Hash( int capacity /*= 64 */ )
 {
     pool.Init( sizeof( Node ), 4096, capacity );
     int prime = GetPrime( capacity );
     nodes.Reserve( prime );
     buckets.Resize( prime );
 }
Example #2
0
 void Hash<TK>::Resize()
 {
     int prime = GetPrime( nodes.Size() * 3 );
     nodes.Reserve( prime );
     buckets.Resize( prime, false );
     memset( buckets.Data(), 0, buckets.ByteSize() );      // clean up
     for( int i = 0; i < nodes.Size(); ++i )
     {
         auto& o = nodes[ i ];
         auto mod = o->hash % prime;
         o->next = buckets[ mod ];
         buckets[ mod ] = o;
     }
 }
Example #3
0
 void Hash<TK>::Reserve( int capacity )
 {
     if( capacity <= buckets.Size() ) return;
     int prime = GetPrime( (int)Round2n( capacity ) );
     nodes.Reserve( prime );
     buckets.Resize( prime, false );
     memset( buckets.Data(), 0, buckets.ByteSize() );      // clean up
     for( int i = 0; i < nodes.Size(); ++i )
     {
         auto& o = nodes[ i ];
         auto mod = o->hash % prime;
         o->next = buckets[ mod ];
         buckets[ mod ] = o;
     }
 }
Example #4
0
	void solve(void) {
		Input();
		GetPrime();
		Work();
		Pow2();
	}
Example #5
0
int main(int argc, char **argv) {
  printf("The 10th prime is: %" PRIu64 "\n", GetPrime(10));
  printf("The 168th prime is: %" PRIu64 "\n", GetPrime(168));
  printf("The 1000th prime is: %" PRIu64 "\n", GetPrime(1000));
  return EXIT_SUCCESS;
}