/* Copyright (C) 2015 Vladimir Glazachev This file is part of FLINT. FLINT is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License (LGPL) as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. See . */ #include #include #include #include "flint.h" #include "aprcl.h" int main(void) { int i, j; FLINT_TEST_INIT(state); flint_printf("unity_zpq_gauss_sum...."); fflush(stdout); for (i = 0; i < 10 * flint_test_multiplier(); i++) { int result; ulong p, q, pnum, ppow; fmpz_t n; unity_zpq gausssigma, gauss, gausspower; n_factor_t factors; n_factor_init(&factors); q = n_randprime(state, 6, 0); if (q == 2) q = 7; n_factor(&factors, q - 1, 0); pnum = n_randint(state, factors.num); p = factors.p[pnum]; ppow = n_randint(state, factors.exp[pnum]); if (ppow == 0) ppow = 1; p = n_pow(p, ppow); fmpz_init_set_ui(n, n_randprime(state, 16, 0)); unity_zpq_init(gausssigma, q, p, n); unity_zpq_init(gauss, q, p, n); unity_zpq_init(gausspower, q, p, n); unity_zpq_gauss_sum(gauss, q, p); unity_zpq_gauss_sum_sigma_pow(gausssigma, q, p); unity_zpq_pow(gausspower, gauss, n); result = 0; for (j = 0; j < p; j++) { unity_zpq_mul_unity_p_pow(gauss, gausspower, j); if (unity_zpq_equal(gauss, gausssigma)) { result = 1; break; } } if (result == 0) { flint_printf("FAIL\n"); abort(); } unity_zpq_clear(gausssigma); unity_zpq_clear(gauss); unity_zpq_clear(gausspower); fmpz_clear(n); } FLINT_TEST_CLEANUP(state); flint_printf("PASS\n"); return 0; }