Skip to content

Instantly share code, notes, and snippets.

@realmonster
Created August 21, 2020 16:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save realmonster/c423b6a160dc34422653b12db9e51f85 to your computer and use it in GitHub Desktop.
Save realmonster/c423b6a160dc34422653b12db9e51f85 to your computer and use it in GitHub Desktop.
prime tan using Stern-Brocot tree
#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;
}
=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