(root)/
glib-2.79.0/
glib/
gprimes.c
       1  /* GLIB - Library of useful routines for C programming
       2   * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
       3   *
       4   * SPDX-License-Identifier: LGPL-2.1-or-later
       5   *
       6   * This library is free software; you can redistribute it and/or
       7   * modify it under the terms of the GNU Lesser General Public
       8   * License as published by the Free Software Foundation; either
       9   * version 2.1 of the License, or (at your option) any later version.
      10   *
      11   * This library is distributed in the hope that it will be useful,
      12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
      13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      14   * Lesser General Public License for more details.
      15   *
      16   * You should have received a copy of the GNU Lesser General Public
      17   * License along with this library; if not, see <http://www.gnu.org/licenses/>.
      18   */
      19  
      20  /*
      21   * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
      22   * file for a list of people on the GLib Team.  See the ChangeLog
      23   * files for a list of changes.  These files are distributed with
      24   * GLib at ftp://ftp.gtk.org/pub/gtk/.
      25   */
      26  
      27  /*
      28   * MT safe
      29   */
      30  
      31  #include "config.h"
      32  
      33  #include "gprimes.h"
      34  
      35  
      36  static const guint g_primes[] =
      37  {
      38    11,
      39    19,
      40    37,
      41    73,
      42    109,
      43    163,
      44    251,
      45    367,
      46    557,
      47    823,
      48    1237,
      49    1861,
      50    2777,
      51    4177,
      52    6247,
      53    9371,
      54    14057,
      55    21089,
      56    31627,
      57    47431,
      58    71143,
      59    106721,
      60    160073,
      61    240101,
      62    360163,
      63    540217,
      64    810343,
      65    1215497,
      66    1823231,
      67    2734867,
      68    4102283,
      69    6153409,
      70    9230113,
      71    13845163,
      72  };
      73  
      74  /**
      75   * g_spaced_primes_closest:
      76   * @num: a #guint
      77   *
      78   * Gets the smallest prime number from a built-in array of primes which
      79   * is larger than @num. This is used within GLib to calculate the optimum
      80   * size of a #GHashTable.
      81   *
      82   * The built-in array of primes ranges from 11 to 13845163 such that
      83   * each prime is approximately 1.5-2 times the previous prime.
      84   *
      85   * Returns: the smallest prime number from a built-in array of primes
      86   *     which is larger than @num
      87   */
      88  guint
      89  g_spaced_primes_closest (guint num)
      90  {
      91    gsize i;
      92  
      93    for (i = 0; i < G_N_ELEMENTS (g_primes); i++)
      94      if (g_primes[i] > num)
      95        return g_primes[i];
      96  
      97    return g_primes[G_N_ELEMENTS (g_primes) - 1];
      98  }