export interface FFTField {
    sqrt_t?: bigint;
    t: bigint;
    sqrt_s?: number;
    s: number;
    one: bigint;
    half: bigint;
    eq(a: bigint, b: bigint): boolean;
    pow(b: bigint, e: bigint | number): bigint;
    add(a: bigint, b: bigint): bigint;
    inv(a: bigint): bigint;
    square(a: bigint): bigint;
    mul(a: bigint, b: bigint): bigint;
    mulScalar(base: bigint, s: bigint | number | string): bigint;
}
export interface FFTGroup {
    add(a: bigint, b: bigint): bigint;
    sub(a: bigint, b: bigint): bigint;
}
export type OpMulGF = (a: bigint, b: bigint) => bigint;
export default class FFT {
    F: FFTField;
    G: FFTGroup;
    opMulGF: OpMulGF;
    w: bigint[];
    wi: bigint[];
    roots: bigint[][];
    constructor(G: FFTGroup, F: FFTField, opMulGF: OpMulGF);
    _setRoots(n: number): void;
    fft(p: bigint[]): bigint[];
    ifft(p: bigint[]): bigint[];
}
