mirror of
https://github.com/lcn2/calc.git
synced 2025-08-16 01:03:29 +03:00
84 lines
2.8 KiB
C
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__ */
|