📄 文档.txt
字号:
数的格式:
由于USHORT(全称unsigned short int)长16bit。USHORT*USHORT长度小于32bit,
所以可以没有损失得存储在ULONG(全称unsigned long)中。故考虑用基于USHORT的数组来
表示大整数。
在确定所用大整数的容量时,考虑到动态分配或释放内存比较麻烦,也耗费时间,所以
直接定义成静态数组。通过宏定义来确定所需要的大小。具体数据结构如下:
typedef unsigned short clint;
typedef clint CLINT[CLINTMAXDIGIT+1];
大数通过
CLINT n_l;
声明。
FLINT.C中各函数的说明:
各函数中可能会用到的宏定义(不区分大小写)
MIN(a,b),MIN_L(a,b) return the minimum one
MAX(a,b),MAX_L(a,b) return the maximum one
SWAP(a,b),SWAP_L(a,b) swap the value of a and b
RMLDZRS_L(n_l) ReMoveLeaDingZeRoS from CLINT-variables
ZCPY_L Copy CLINT types with removal of leading zeros
ANDMAX_L Reduction modulo Nmax + 1
SETZERO_L Set CLINT-variables to values 0.
SETONE_L(n_l) Set CLINT-variables to values 1.
SETTWO_L(n_l) Set CLINT-variables to values 2.
DIGITS_L(n_l) Read the number of digits of a CLINT-variable
SETDIGITS_L(n_l, l) Set the number of digits of a CLINT-variable
INCDIGITS_L(n_l) Increment the number of digits of a CLINT-variable
DECDIGITS_L(n_l) Decrement the number of digits of a CLINT-variable
MSDPTR_L(n_l) Pointer to the most significant digit of a CLINT variable
LSDPTR_L(n_l) Pointer to the least significant digit of a CLINT variable
LT_L(a_l,b_l) test if a_l < b_l
LE_L(a_l,b_l) test if a_l <= b_l
GT_L(a_l,b_l) test if a_l > b_l
GE_L(a_l,b_l) test if a_l >= b_l
GTZ_L(a_l) test if a_l > 0
EQZ_L(a_l) test if a_l = 0
EQONE_L(a_l) test if a_l == 1
SET_L(a_l,ul) a_l <-- unsigned long ul
ASSIGN_L(dest_l,src_l) assign value src_l to dest_l
ISEVEN_L(a_l) true: a_l is even
ISODD_L(a_l) true: a_l is odd
INITRAND_LT() ulseed64_l ((unsigned long)time(NULL))
INITRAND64_LT() ulseed64_l ((unsigned long)time(NULL))
INITRANDBBS_LT() ulseedBBS_l ((unsigned long)time(NULL))
SFACTOR_L(n_l) sieve_l ((n_l), NOOFSMALLPRIMES),Simple factorization with sieve_l()
ISPRIME_L(n) prime_l ((n), 302, 0),Miller-Rabin primality test, parameters according to Lenstra and [MOV]
各函数的说明:
功能: Copy CLINT to CLINT
格式: void cpy_l (CLINT dest_l, CLINT src_l);
输入: CLINT src_l
输出: CLINT dest_l
返回值: -
功能: Swap two CLINT operands
格式: void fswap_l (CLINT a_l, CLINT b_l);
输入: CLINT a_l, b_l
输出: Swapped CLINT operands b_l, a_l
返回值: -
功能: Test whether two CLINT operands are equal
格式: int equ_l (CLINT a_l, CLINT b_l);
输入: CLINT a_l, b_l
输出: -
返回值:1 : a_l have b_l equal values
0 : otherwise
功能: Test whether two CLINT operands are equal modulo m
格式: int mequ_l (CLINT a_l, CLINT b_l, CLINT m_l);
输入: CLINT a_l, b_l (Values to compare), CLINT m_l (Modulus)
输出: -
返回值:1 : a_l = b_l mod m_l
0 : a_l != b_l mod m_l
E_CLINT_DBZ: division by 0
功能: Generation of maximum CLINT value 2^CLINTMAXBIT - 1
格式: clint * setmax_l (CLINT a_l);
输入: a_l CLINT variable
输出: a_l set to value of 2^CLINTMAXBIT - 1 = Nmax
返回值: Address of CLINT variable a_l
功能: Addition of two CLINT operands
格式: int add_l (CLINT a_l, CLINT b_l, CLINT s_l);
输入: a_l, b_l (Operands)
输出: s_l (Sum)
返回值: E_CLINT_OK : Everything O.K.
E_CLINT_OFL: Overflow
功能: Subtraction of one CLINT operand from another
格式: int sub_l (CLINT aa_l, CLINT bb_l, CLINT d_l);
输入: aa_l, bb_l (Operands)
输出: d_l (Value of a_l - b_l)
返回值: E_CLINT_OK : Everything O.K.
E_CLINT_UFL: Underflow
功能: Subtraction of one CLINT operand from another
格式: int sub_l (CLINT aa_l, CLINT bb_l, CLINT d_l);
输入: aa_l, bb_l (Operands)
输出: d_l (Value of a_l - b_l)
返回值: E_CLINT_OK : Everything O.K.
E_CLINT_UFL: Underflow
功能: Decrement
格式: int dec_l (CLINT a_l);
输入: a_l (CLINT value)
输出: a_l, decremented by 1
返回值: E_CLINT_OK : Everything O.K.
E_CLINT_UFL: Underflow
功能: Multiplication
格式: int mul_l (CLINT f1_l, CLINT f2_l, CLINT pp_l);
输入: f1_l, f2_l (Factors)
输出: p_l (Product)
返回值: E_CLINT_OK : Everything O.K.
E_CLINT_OFL: Overflow
功能: Squaring
格式: int sqr_l (CLINT f_l, CLINT pp_l);
输入: f_l (Factor)
输出: pp_l (Square)
返回值: E_CLINT_OK : Everything O.K.
E_CLINT_OFL: Overflow
功能: Integer Division
格式: int div_l (CLINT d1_l, CLINT d2_l, CLINT quot_l, CLINT rem_l);
输入: d1_l (Dividend), d2_l (Divisor)
输出: quot_l (Quotient), rem_l (Remainder)
返回值: E_CLINT_OK : Everything O.K.
E_CLINT_DBZ: Division by Zero
功能: Binary rightshift by 1 bit
格式: int shr_l (CLINT a_l);
输入: a_l (Operand)
输出: a_l (Shifted value)
返回值: E_CLINT_OK : Everything O.K.
E_CLINT_UFL: Underflow
功能: Binary leftshift by 1 bit
格式: int shl_l (CLINT a_l);
输入: a_l (Operand)
输出: a_l (Shifted value)
返回值: E_CLINT_OK : Everything O.K.
E_CLINT_OFL: Overflow
功能: Binary left-/rightshift by n bits
格式: int shift_l (CLINT n_l, long int noofbits);
输入: n_l (Operand)
noofbits (Number of places to be shifted)
negative sign: Shift right
positive sign: Shift left
输出: a_l (Shifted value)
返回值: E_CLINT_OK : Everything O.K.
E_CLINT_OFL: Overflow
E_CLINT_UFL: Underflow
功能: Reduction modulo m
格式: int mod_l (CLINT dv_l, CLINT ds_l, CLINT r_l);
输入: dv_l (Dividend), ds_l (Divisor)
输出: r_l (Remainder of dv_l mod ds_l)
返回值: E_CLINT_OK : Everything O.K.
E_CLINT_DBZ: Division by Zero
功能: Reduction mod 2^k
格式: int mod2_l (CLINT d_l, ULONG k, CLINT r_l);
输入: d_l (Dividend), k (Exponent of 2^k)
输出: r_l (Remainder of d_l mod 2^k)
返回值: E_CLINT_OK : Everything O.K.
E_CLINT_DBZ: Division by Zero
功能: Modular addition
格式: int madd_l (CLINT aa_l, CLINT bb_l, CLINT c_l, CLINT m_l);
输入: aa_l, bb_l, m_l (Operands)
输出: c_l (Remainder of aa_l + bb_l mod m_l)
返回值: E_CLINT_OK : Everything O.K.
E_CLINT_DBZ: Division by Zero
功能: Modular subtraction
格式: int msub_l (CLINT aa_l, CLINT bb_l, CLINT c_l, CLINT m_l);
输入: aa_l, bb_l, m_l (Operands)
输出: c_l (Remainder of aa_l - bb_l mod m_l)
返回值: E_CLINT_OK : Everything O.K.
E_CLINT_DBZ: Division by Zero
功能: Modular Multiplication
格式: int mmul_l (CLINT aa_l, CLINT bb_l, CLINT c_l, CLINT m_l);
输入: aa_l, bb_l, m_l (Operands)
输出: c_l (Remainder of aa_l * bb_l mod m_l)
返回值: E_CLINT_OK : Everything O.K.
E_CLINT_DBZ: Division by Zero
功能: Modular squaring
格式: int msqr_l (CLINT aa_l, CLINT c_l, CLINT m_l);
输入: aa_l, m_l (Operands)
输出: c_l (Remainder of aa_l * aa_l mod m_l)
返回值: E_CLINT_OK : Everything O.K.
E_CLINT_DBZ: Division by Zero
功能: Montgomery multiplication
格式: void mulmon_l (CLINT a_l, CLINT b_l, CLINT n_l, USHORT nprime,
USHORT logB_r, CLINT p_l);
输入: a_l, b_l (Factors)
n_l (Modulus, odd, n_l > a_l, b_l)
nprime (-n_l^(-1) mod B)
logB_r (Integral part of logarithm of r to base B)
(For an explanation of the operands cf. Chap. 6)
输出: p_l (Remainder of a_l * b_l * r^(-1) mod n_l)
with r := B^logB_r, B^(logB_r-1) <= n_l < B^logB_r)
返回值: -
功能: Inverse -n^(-1) mod B for odd n
格式: USHORT invmon_l (CLINT n_l);
输入: n_l (Modulus)
输出: -
返回值: -n^(-1) mod B
功能: Modular exponentiation
Automatic application of Montgomery exponentiation mexpkm_l
if modulus is even, else mexpk_l is used
格式: int mexp_l (CLINT bas_l, CLINT exp_l, CLINT p_l, CLINT m_l);
输入: bas_l (Base), exp_l (Exponent), m_l (Modulus)
输出: p_l (Remainder of bas_l^exp_l mod m_l)
返回值: E_CLINT_OK : Everything O.K.
E_CLINT_DBZ: Division by Zero
功能: Modular Exponentiation
with representation of exponent to base 2^5
格式: int mexp5_l (CLINT bas_l, CLINT exp_l, CLINT p_l, CLINT m_l);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -