Files
calc/prime.h
2017-05-21 15:38:33 -07:00

84 lines
2.8 KiB
C

/*
* Copyright (c) 1997 by Landon Curt Noll. All Rights Reserved.
*
* Permission to use, copy, modify, and distribute this software and
* its documentation for any purpose and without fee is hereby granted,
* provided that the above copyright, this permission notice and text
* this comment, and the disclaimer below appear in all of the following:
*
* supporting documentation
* source copies
* source works derived from this source
* binaries derived from this source or from derived source
*
* LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
* EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*
* chongo was here /\../\
*/
#if !defined(__PRIME_H__)
#define __PRIME_H__
#include "qmath.h"
#include "have_const.h"
#define MAX_MAP_PRIME ((FULL)65521) /* (2^16-15) larest prime in prmap */
#define MAX_MAP_VAL ((FULL)65535) /* (2^16-1) larest bit in pr_map */
#define MAX_SM_PRIME ((FULL)0xfffffffb) /* (2^32-5) larest 32 bit prime */
#define MAX_SM_VAL ((FULL)0xffffffff) /* (2^32-1) larest 32 bit value */
#define MAP_POPCNT 6541 /* number of odd primes in pr_map */
#define NXT_MAP_PRIME ((FULL)65537) /* (2^16+1) smallest prime > 2^16 */
#define PIX_32B ((FULL)203280221) /* pix(2^32-1) - max pix() value */
/*
* product of primes that fit into a long
*/
#if BASEB == 32
#define MAX_PFACT_VAL 52 /* max x, for which pfact(x) is a long */
#define NXT_PFACT_VAL 14 /* next prime for higher pfact values */
#else
#define MAX_PFACT_VAL 28 /* max x, for which pfact(x) is a long */
#define NXT_PFACT_VAL 8 /* next prime for higher pfact values */
#endif
/*
* If n is odd and 1 <= n <= MAX_MAP_VAL, then:
*
* pr_map_bit(n) != 0 ==> n is prime
* pr_map_bit(n) == 0 ==> n is NOT prime
*/
#define pr_map_bit(n) (pr_map[(HALF)(n)>>4] & (1 << (((HALF)(n)>>1)&0x7)))
/*
* Limits for piXb tables. Do not test about this value using the
* given table, even though the table has a higher sentinal value.
*/
#define MAX_PI10B ((1024*256)-1) /* largest pi10b value to test */
#define MAX_PI18B ((FULL)(0xFFFFFFFF)) /* largest pi18b value to test */
/*
* Prime related external arrays.
*/
extern CONST unsigned short prime[];
extern CONST unsigned char pr_map[];
extern CONST unsigned short pi10b[];
extern CONST unsigned short pi18b[];
extern NUMBER _nxtprime_; /* 2^32+15 - smallest prime > 2^32 */
extern CONST ZVALUE _nxt_prime_; /* 2^32+15 - smallest prime > 2^32 */
extern CONST ZVALUE _jmpmod2_; /* JMPMOD*2 as a ZVALUE */
#endif /* !__PRIME_H__ */