-
-
Save realmonster/c423b6a160dc34422653b12db9e51f85 to your computer and use it in GitHub Desktop.
prime tan using Stern-Brocot tree
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <cstdio> | |
#include <cmath> | |
#include <vector> | |
#include <algorithm> | |
#include <gmp.h> | |
#include <mpfr.h> | |
const int MAXT = 1e7; | |
using namespace std; | |
typedef long long ll; | |
double tann(double x) | |
{ | |
return tan(x); | |
} | |
void solve() | |
{ | |
int prec = 153; | |
scanf("%d", &prec); | |
mpfr_set_default_prec(prec); | |
mpfr_t pi; | |
mpfr_init(pi); | |
mpfr_const_pi(pi, MPFR_RNDN); | |
mpfr_t tt, ftmp, ftmp1; | |
mpfr_init(tt); | |
mpfr_init(ftmp); | |
mpfr_init(ftmp1); | |
mpz_t ln, lm, rn, rm, cn, cm, tmp, tmp1, xx, yy; | |
mpz_init(cn); | |
mpz_init(cm); | |
mpz_init(tmp); | |
mpz_init(tmp1); | |
mpz_init(xx); | |
mpz_init(yy); | |
mpz_init_set_si(ln, 0); | |
mpz_init_set_si(lm, 1); | |
mpz_init_set_si(rn, 1); | |
mpz_init_set_si(rm, 1); | |
mpfr_t x; | |
mpfr_init(x); | |
mpfr_sub_si(x, pi, 3, MPFR_RNDN); | |
int n; | |
scanf("%d", &n); | |
for (int i = 0; i < n; ++i) | |
{ | |
mpz_add(cn, ln, rn); | |
mpz_add(cm, lm, rm); | |
mpz_mul_si(tmp, cm, 3); | |
mpz_add(tmp, tmp, cn); | |
//mpfr_printf("%Zd %Zd %Zd\n", cn, cm, tmp); | |
fflush(stdout); | |
if (mpz_fdiv_ui(tmp, 2) == 0 && mpz_fdiv_ui(cm, 2) == 1) | |
{ | |
mpz_fdiv_q_ui(xx, tmp, 2); | |
mpz_fdiv_q_ui(yy, cm, 2); | |
mpfr_set_z(tt, xx, MPFR_RNDN); | |
mpfr_tan(tt, tt, MPFR_RNDN); | |
mpfr_div_si(ftmp, pi, -2, MPFR_RNDN); | |
mpfr_add_z(ftmp, ftmp, xx, MPFR_RNDN); | |
mpfr_mul_z(ftmp1, pi, yy, MPFR_RNDN); | |
mpfr_sub(ftmp, ftmp, ftmp1, MPFR_RNDN); | |
//print("="+str(xx)+'-pi/2-pi*'+str(yy)+'=',xx-pi/2-piy*y) | |
//mpfr_printf("=%Zd-pi/2-pi*%Zd=%.40Rf\n", xx, yy, ftmp); | |
if (mpfr_cmp_z(tt, xx) > 0) | |
{ | |
mpfr_printf("=%Zd-pi/2-pi*%Zd=%40Rf\n", xx, yy, ftmp); | |
mpfr_printf("%Zd %.40Rf\n", xx, tt); | |
fflush(stdout); | |
} | |
} | |
mpfr_set_z(ftmp, cn, MPFR_RNDN); | |
mpfr_div_z(ftmp, ftmp, cm, MPFR_RNDN); | |
if (mpfr_cmp(x, ftmp) < 0) | |
{ | |
mpz_set(rn, cn); | |
mpz_set(rm, cm); | |
} | |
else | |
{ | |
mpz_set(ln, cn); | |
mpz_set(lm, cm); | |
} | |
} | |
} | |
int main() | |
{ | |
solve(); | |
return 0; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
=260515-pi/2-pi*82924= -0.000003 | |
260515 383610.7077437272851095720589016772482537589470 | |
=37362253-pi/2-pi*11892774= -0.000000 | |
37362253 37754853.3617729085921758247303118707067268523226 | |
=122925461-pi/2-pi*39128389= -0.000000 | |
122925461 326900723.4798352035430916950648974167215981564707 | |
=534483448-pi/2-pi*170131365= -0.000000 | |
534483448 1914547468.5368285042235547779377721318313271365649 | |
=3083975227-pi/2-pi*981659803= -0.000000 | |
3083975227 13356993783.7643913294608718310036553981740667815947 | |
=902209779836-pi/2-pi*287182292333= -0.000000 | |
902209779836 1893164438251.9019324166397158509282176581234732728407 | |
=74357078147863-pi/2-pi*23668593082205= -0.000000 | |
74357078147863 134654932852015.4995454863805727053823504537266546726295 | |
=214112296674652-pi/2-pi*68154060785058= -0.000000 | |
214112296674652 3855691461342749.0776099973614061751061894040133542898352 | |
=18190586279576483-pi/2-pi*5790243448268414= -0.000000 | |
18190586279576483 39184460041569213.8106577941345650815441627775883300985796 | |
=248319196091979065-pi/2-pi*79042455045288253= -0.000000 | |
248319196091979065 336860854714118242.9124970344461798065787420949619462209333 | |
=1108341089274117551-pi/2-pi*352795925979662933= -0.000000 | |
1108341089274117551 1670925000682633077.7827592142016007252897350236159328264456 | |
=118554299812338354516058-pi/2-pi*37737005679864417395633= -0.000000 | |
118554299812338354516058 302694923193883721597712.9015090269403303336349933960174404035128 | |
=1428599129020608582548671-pi/2-pi*454737226160812402842656= -0.000000 | |
1428599129020608582548671 16439435717609010537922321.8845849757775898963391565241072423757325 | |
=9322105473781932574489648896-pi/2-pi*2967318332352818971817766548= -0.000000 | |
9322105473781932574489648896 40338043439489624307995644624.7685363481543431764064874322598477320346 | |
=1647533557310758242795542778250-pi/2-pi*524426219111563221716960802359= -0.000000 | |
1647533557310758242795542778250 3781332851129826614143569782851.3878376913994678163125209136273433510599 | |
=6653142362005993598498365464129-pi/2-pi*2117760988014684056204194864661= -0.000000 | |
6653142362005993598498365464129 8732177771799240118561649550871.2416126192553313511377716215543058813984 | |
=576158399707529532856928653334013-pi/2-pi*183396914634738698139694548173066= -0.000000 | |
576158399707529532856928653334013 873060415859317610450780011453652.7981016580397914966082531692011132866762 | |
=19203062276130315764031455655979057-pi/2-pi*6112524567495285043304416874147329= -0.000000 | |
19203062276130315764031455655979057 145341664535339512907321611837878173.7145602119707028673485263112279192092247 | |
=231767240447593988184889934086223330-pi/2-pi*73773803928004888115736196941623258= -0.000000 | |
231767240447593988184889934086223330 805464480277747403706606666100463360.6745774553830112924811129323808199584325 | |
=1371400380409433613345308148861360923-pi/2-pi*436530299000534043651112764775592221= -0.000000 | |
1371400380409433613345308148861360923 1758153593441719961783719904990518234.8665788713397773564619975700148905273667 | |
=360672654174201132186536702459668979785501-pi/2-pi*114805671499795655843352846668101633492757= -0.000000 | |
360672654174201132186536702459668979785501 466618891221695639090793729635403343566689.5113219314720876014264229957501211655713 | |
=16132875282857518417293384808417539001172631-pi/2-pi*5135253695103666423722992294379021254981721= -0.000000 | |
16132875282857518417293384808417539001172631 21902235453622030161672383121109158060235583.3182250939394467266014924730327779845848 | |
=378942232820064582240301274646582332037664078-pi/2-pi*120621058999186263129568642494572948675324076= -0.000000 | |
378942232820064582240301274646582332037664078 708432217144382628367005646704674203198647039.6602849667402767479092179686329243646824 | |
=1169809367327212570704813632106852886389036911-pi/2-pi*372361886570657207271055532047372839427821534= -0.000000 | |
1169809367327212570704813632106852886389036911 4709186030398989007843871619726545165019129271.8314850745564428674692959738773104228607 | |
=22259360648084057667375368818197310731667745986-pi/2-pi*7085374554415585356032404713463737942530458460= -0.000000 | |
22259360648084057667375368818197310731667745986 81198429235569061313449854482822342871956788986.2104935292669664176915370197448313872543 | |
=1531216647248491128766081193927187028939518325390-pi/2-pi*487401396708392760737151703100808426676890347636= -0.000000 | |
1531216647248491128766081193927187028939518325390 2728952425907356482483375589048825878114259942997.6513739601308354455572357399634076699278 | |
=4719396382295507308889802400540643563335875857787-pi/2-pi*1502230525304676380159881717501370670758534367007= -0.000000 | |
4719396382295507308889802400540643563335875857787 9655561421183811437387724822260174309481752200227.4266475963003974136997834477776265637035 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment