/* * pix - iterative method of finding the number of primes less than x * * Copyright (C) 1999 Landon Curt Noll * * Calc is open software; you can redistribute it and/or modify it under * the terms of the version 2.1 of the GNU Lesser General Public License * as published by the Free Software Foundation. * * Calc is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General * Public License for more details. * * A copy of version 2.1 of the GNU Lesser General Public License is * distributed with calc under the filename COPYING-LGPL. You should have * received a copy with calc; if not, write to Free Software Foundation, Inc. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * * @(#) $Revision: 30.1 $ * @(#) $Id: pix.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/pix.cal,v $ * * Under source code control: 1996/07/09 03:14:14 * File existed as early as: 1996 * * chongo /\oo/\ http://www.isthe.com/chongo/ * Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/ */ /* * Here is an iterative method of finding the number of primes less than * or equal to a given number. This method is from "Computer Recreations" * June 1996 issue of Scientific American. * * NOTE: For reasonable values of x, the builtin function pix(x) is * much faster. This code is provided because the method * is interesting. */ define pi_of_x(x) { local An; /* A(n) */ local An1; /* A(n-1) */ local An2; /* A(n-2) */ local An3; /* A(n-3) */ local primes; /* number of primes found */ local n; /* loop counter */ /* * setup */ An1 = 2; An2 = 0; An3 = 3; primes = 1; /* * main A(n+1)=A(n-1)+A(n-2) sequence loop */ for (n = 3; n < x; ++n) { An = An2 + An3; An3 = An2; An2 = An1; An1 = An; if (An % n == 0) ++primes; } return primes; }