/* Copyright (C) 2020 Alessandro Languasco */ /**************** A. LANGUASCO ******************** ************* COMPUTATION OF THE min_chi |L'/L| MOD q(PRIME) *******/ /************************* Building the S approach ****************/ \\ Global variables: global(Deninger_matrix_S_DIF); global(log_gamma_matrix); global(ak_matrix); global(tab); \\global variable used to initialise sumnum global(phir); global(phirhalf); global(pir); global(defaultprecision); /************* COMPUTATION OF THE min_chi |L'/L| MOD q(PRIME) ******* ************* FOR r1<=q<=r2 ************* ************* Using the S-function (decimated in frequency) ********************/ {minS_DIF(r1,r2,defaultprecision)=local(minutes, millisec, seconds, rows, columns, elaptimefinalcomp, elaptimeprecomp, M, derlog, evenresult,oddresult, qminusone, qminustwo, correctionderlog, logtwopi, qminusonehalf, qminusonehalfminusone, twoPi, twoPiI, u, conjv, chi, denom, numer, i ); \\ minutes,millisec,seconds: used just to compute the elapsed computation time; local variables \\ defaultprecision: used to fix the precision used in the computations; global variable print("************ A. LANGUASCO *************"); print("********* COMPUTATION OF THE MIN |L'/L|**********"); print("******* FOR q IN ONE INTERVAL ********"); print("********* with the S-FUNCTION (decimated in frequency) **********"); \\ precision setting default(realprecision,defaultprecision); r1=nextprime(r1); r2=precprime(r2); if (r1>r2, print("error: no odd primes in this interval. END PROGRAM");return); if (r1 < 3, r1=3); print("Interval=[",r1,",",r2,"]"); phir=r2-1; phirhalf=phir/2; pir=primepi(r2)-primepi(r1)+1; tab = sumnuminit(); \\ needed for the sumnum functions gettime(); print("Performing precomputations of S(a/q) (decimated in frequency)"); print("and log(Gamma(a/q)) for this interval"); precompS_DIF(r1,r2); elaptimeprecomp=gettime(); twoPi=2*Pi; logtwopi=log(twoPi); twoPiI=twoPi*I; i=0; gettime(); print("Starting computation of min_q"); forprime(q=r1,r2, i+=1; qminusone=q-1; qminustwo=qminusone-1; qminusonehalf=qminusone/2; qminusonehalfminusone=qminusonehalf-1; correctionderlog= Euler + logtwopi; u=twoPiI/qminusone; M=10^(10000);derlog=0; \\ even characters for (m=1, qminusonehalfminusone, numer=0; denom=0; \\ v=exp(u*2*m); \\ j=2m+1; j-1 even (j odd) means an even character conjv= exp(-u*2*m); \\ conjugate of v chi=1; \\ k=0 ; chi = v^0 for (k=0,qminusonehalfminusone, \\chi=v^(-k) built via subsequent products numer += chi * Deninger_matrix_S_DIF[i,k+1]; \\ DeningerS(g^k%q/q) \\ the output is -(S(a/q)+S(1-a/q)) denom += chi * log_gamma_matrix[i,k+1]; \\log(gamma(g^k%q/q)) chi= chi * conjv; ); for (k=qminusonehalf,qminustwo, denom += chi * log_gamma_matrix[i,k+1]; \\log(gamma(g^k%q/q)) chi= chi * conjv; ); derlog=abs(correctionderlog+numer/(2*denom)); if (derlog