Skip to content

Instantly share code, notes, and snippets.

@cab1729
Last active September 8, 2017 21:28
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 cab1729/1318030 to your computer and use it in GitHub Desktop.
Save cab1729/1318030 to your computer and use it in GitHub Desktop.
Code Samples - Core Java/Math: functions library
public class constants {
public static final double PI_INV = 1.0/StrictMath.PI;
public static final double PI_SL8 = StrictMath.PI * 0.125;
public static final double TWO_PI = 2*StrictMath.PI;
public static final double TWO_PI_INV = 0.5*PI_INV;
public static final double HALF_PI = 0.5*StrictMath.PI;
// Euler-Mascheroni constant (gamma)
public static final double EM =
+0.5772156649015328606065120900824024310421593359;
public static final double oneonlog10 =
0.4342944819032518276511289189166050822944;
// The arrays DCI(30) can easily be extended to DCI (>30).
// See: High precision coefficients related to the zeta function
// by F.D. Crary and J.Barkley Rosser (Univ.Wisconsin, Report#1344).
// Also see: W.Gabcke, Dissertation, Gottingen, 1979.
// Maple: evalf(series(cos(Pi/8*(4*z^2+3))/cos(Pi*z), z=0,78));
// Mathematica: N[Series[Cos[Pi/8*(4*z^2+3)]/Cos[Pi*z], {z,0,78}], 100]
public static final double[] DC0 = {
+0.382683432365089771728459984030398866761344562485627041433800635627546033960089692237013785342283547148424288661,
+0.437240468077520449360296467371331987073041501042363031866378610690404508264026362304924073435669639094324286079,
+0.1323765754803435233240352673915105554743229955586736726649426880559566435420738501669778293204183675017943241749,
-0.01360502604767418865498318870909990766070687027421894648326187950903716176818633068962485278356136895679047020906,
-0.01356762197010358088791567058349920618602959696188054686917829168674934087357724499903115819721107719785647775895,
-0.001623725323144465282854625294133649725659201718172548305398980308243971457730734393999432889383665122685176399873,
+0.0002970535373337969078312728339951586690679333334505619667872265698183319369203982805177634566104207720143400458262,
+0.0000794330087952146958801639026487950144873099152560321495071752950226903173395878801705671344477374930716659999123,
+4.65561246145045050370634021603476231240414569015306013316932838935348879193481820928464518626366832313236741193e-7,
-1.432725163095510575408246312062615888246258029228068660731581897805436577213074435556392472287142822769748329508e-6,
-1.035484711231294607500741567738403498882724615888283179447948653075217984108710847647177577896120460086478764151e-7,
+1.235792708386173805612576262312530316510117762098112867236451610214808402930282161805187583832632897001667458326e-8,
+1.788108385795490498566678140706904566454558839254644214800304281524529021049731788926650722192519086137173526827e-9,
-3.391414389927035906940621897884455615248397316288972845006785754803502806891904570703993463969380667640255995188e-11,
-1.632663390256590510137405297104810281346405431822126827413147731265198687738077289595025493824604361493389459115e-11,
-3.78510931854122038285464720018504502639038535531200438309272315224985279176248298240356571256856962726814475742e-13,
+9.32742325920172484566232063986986360002139698116915631937705187400020105037249065099538843442588188664675147467e-14,
+5.22184301597813685531389314785302371037675394827206477433177228406371981681645773099043136444005380798369532226e-15,
-3.350673072744263789515090357947326053042838022398065784111555892808740716677888930078701970602503964936006395104e-16,
-3.412426522811726494080987104562058778608283456254096935869001796289917525710367617748381397622542683846888672015e-17,
+5.75120334143239916033950179516459231161537829470064807231431453813486388545094592961884811901724585064764962844e-19,
+1.489530136321150545475627775734689089370735009741635415160709048603295381414367364949760330404014020213930338814e-19,
+1.256537271702141685330428176609282176536606717440674080535520482356810764118743819183518519587390237199100704507e-21,
-4.72129525014342566895398813667305340706330304767749675702994903089879756535834541307555978776385327369051553303e-22,
-1.32690693630396199927354130926183589457507684264465236751272493873018443686610022790536188919297368265742721815e-23,
+1.105343999512141834453782254227205003182486780211827086005486828970265089129731688133254857575539823725195683922e-24,
+5.49964637752746551114010449998398178325210538268839922240622794248949462106984664855058759404246021418007498035e-26,
-1.823137650231802628064108980945407064129881555145279779343173540693674436633740912616549635547508188700365680468e-27,
-1.568940373772088014686829823192433140971355533415866343941007167915490728982359363699569882728024654791588147859e-28,
+1.583963508823801161065976053779295278390321164235705734225919985692892191820446152269080950811170989257202082911e-30,
+3.4346207254372040220415367076516947462098483922500503564813783179382274162068573263112671201649692317453615905e-31,
+1.702103350031701775318130755271536920853455319760507766090796235001978260644018065519766552941782676624037679422e-33,
-5.99511930495781673363972633565278514210564502273708131802609647284822583102487894658236367081899707846320368051e-34,
-1.04876827540944523668427321724480041261517736197636621170912258890766184956298037903925915158527893326057340676e-35,
+8.42213517834932107854815160735950929394240415164747688538014234387628955118839912704841909631604183775608950552e-37,
+2.584703859771955713160011615401679072208538467158450776918252923628843991474698009272117251533209327471142444888e-38,
-9.34763937488998521367903976236981418745369692048179313134504611480555205177899495504433350362542373205050278136e-40,
-4.56941922524370129765254861055742309974472681838538268606496265105749673629290338481038140628402537476198769926e-4,
+7.5455973947653905212085611627422817804352042098369215797696318278534625566582905601529992674332954823406110951e-43};
// Maple: evalf(series(diff(cos(Pi/8*(4*z^2+3))/cos(Pi*z), z$3)/(12*Pi^2), z=0,78));
// Mathematica: N[Series[D[Cos[Pi/8*(4*z^2+3)]/Cos[Pi*z], {z,3}]/(12*Pi^2), {z,0,78}], 80]
public static final double[] DC1 = {
+0.026825102628375347029991403955666749659270472430643220749776752805867359134188269214280683052,
-0.013784773426351853049870452589896162365948225597532513294465798867691807541688152085576031383,
-0.03849125048223508222873641536318936689609880749450906478327860153836847426887901787229257659,
-0.00987106629906207647201214704618854069280421459666950839994786868965757411195190486323582121,
+0.0033107597608584043329090769513006978028020918561175309707694861178448645426345718015500843326,
+0.0014647808577954150824977965619831119780775457722862078933453303143287255048972099659207209621,
+0.000013207940624876963675161447494430967824291835406154372613530235724535011475016069716813294177,
-0.00005922748701847141323223499528189568406802912492160850522823303196158210932726481656944581815,
-5.980242585373448587710835074515858419335890174202825600668342888976410900581355969992952868e-6,
+9.641322456169826352672985329851666875707836639273182783168607374528344107916458627247029283e-7,
+1.8334733722714411760016793657832219080753603339709992766273715660151990962666208683124437739e-7,
-4.467087562717833599560794227150551934657469384377660055067166840151970252514746820463948005e-9,
-2.7096350821772743216926283987091937259316030722995844412753447458314425593181090759150020757e-9,
-7.785288654315851046294823085209610006727820577278800382831566727931867764632910377867374876e-11,
+2.3437626010893688532484550487104512273133964049734205404375275618829488523490151174368404654e-11,
+1.5830172789987521642162226426287421196746979819448013053513508455771578055396438744193146485e-12,
-1.2119941573723791246646344738017572576448530651660888461727279790245362198776996808868093029e-13,
-1.4583781161108307017582854816989993171964777297933249751938379402944425481261805530630616476e-14,
+2.8786305258131917504558212800208760753536483952839345119896953142223473009317304761040685377e-16,
+8.662862902123724122528252887933104042807961436294852178958442068342689422294037865607742406e-17,
+8.43072272713704127156002253146274997727634288682530999309124260276609727264253556324577217e-19,
-3.630807223097346200173246181103281136955871882367415423137780078494511015098068311048451748e-19,
-1.1626698212838296719413888629248324378808802522154009317733711360471269908689980684964899997e-20,
+1.0975486711527531815901832833980075157643671464693844798841337840675643501161428099083592646e-21,
+6.157399020468427103881470790974945857407651738028111860714322669192813619603136094113741154e-23,
-2.2909280067678471513963826309991269307343977096746438696025932017457239554824102031775874946e-24,
-2.2032811748848795343795982704373537544376537775704078003688163099187931890241159108319322546e-25,
+2.476025180040278508285274215182918632587580796467112641727687468810950715262244429469791761e-27,
+5.954277215583657802272682863953454743730467881559988360025759772968743994237177956667902438e-28,
+3.2612020746795952615337563190661874830891135980274339139845795592240636373843954612255006828e-30,
-1.2654035591041162243650179791261536112558798012347744231540654284163522268689446590266925924e-30,
-2.4312846965496981901634636363338047426353348019050697893343812128678861564371131634064246015e-32,
+2.1383011387546953739564195753197140950296216408034685099183785890974590986138498294625891461e-33,
+7.167799413941061690328338683692708749333075099712339753173535550674454000240550835751326567e-35,
-2.8242936072336665615525326594221813904617133033516236406598931104936386534532483771217816036e-36,
-1.5006074196069282189178370454993947599747135926005292679869580497329724359381439103658938812e-37,
+2.687318940531486108260118827557915092685193539193918356025160117503267595083118443609927278e-39,
+2.4904195007933094154169676810430522646696390103991181635576185062669795340798460145976606456e-40,
-1.1605389825678419639763678032899844219760188058814234948874818004278848389077335785169161417e-42};
// Maple: evalf(series(diff(cos(Pi/8*(4*z^2+3))/cos(Pi*z), z$2)/(16*Pi^2)+diff(cos(Pi/8*(4*z^2+3))/cos(Pi*z), z$6)/(288*Pi^4), z=0, 38));
// Mathematica: N[Series[D[Cos[Pi/8*(4*z^2+3)]/Cos[Pi*z], {z,2}]/(16*Pi^2)+D[Cos[Pi/8*(4*z^2+3)]/Cos[Pi*z], {z,6}]/(288*Pi^4), {z,0,78}], 80]
public static final double[] DC2 = {
0.005188542830293168493784581519230959565968684337910516563725522452072126841897897,
0.00030946583880634746033456743609587882366950030794878439289358718588031842799211307,
-0.011335941078229373382182435255883513410249474890261540938858667942986863079981311,
0.0022330457419581447720571255275803681570983979981642796951293105725719455469601119,
0.005196637408862330205116926953068191888515832107618595474609879576976564736555503,
0.0003439914407620833669465591357991809598418589002147317484417304617440685730817159,
-0.0005910648427470582821732252303077395276588375610173232690309594523280267574834747,
-0.00010229972547935857454427867522727787133943747273471360465084634256262134151394488,
0.000020888392216992755408073296174175415931186305360443691531185576321472947573577868,
5.927665493096535957891996484982863335742249862441772318721993759532135400499668e-6,
-1.6423838362436275977690302847783780496161212669336910235253514740438053597308203e-7,
-1.5161199700940682861734605397187381660081084155970349774087695236188185367222967e-7,
-5.907803698206667962922790253978962060716281592010072012867608882567102850848194e-9,
2.0911514859478188977745555189722580395885704419004240100593948634461745082130407e-9,
1.7815649583292351053799701878847486656009684349096795930345702159393431817224899e-10,
-1.6164072455353830752855769444473857776802820362311211738301273256347933803317603e-11,
-2.3806962496667615707210740380135849781560242513320681741897741346182257287784557e-12,
5.398265295542594918182004148336822987325682997025679714114209585960532400298625e-14,
1.9750142196969515273308733588451725185221802033544774174325263225894059186101604e-14,
2.3332868732882634831048153005923547597095168404970213704335126869670513579626541e-16,
-1.1187517610048080208200483808971615892736704619952328379264891944667482662087555e-16,
-4.164009488883767188501122836433308161241527720525451717634563860759792248049601e-18,
4.446081109291883028903043500928743324161025016190532684886900866475208961810096e-19,
2.8546114783637144545733874269779565433096490605491768968430556415535467088959418e-20,
-1.19132314300378943049718475052661810410453703351011923973272939551201153470687e-21,
-1.2981634360736498946709902313291029349864968257004043970653583551747007944948404e-22,
1.6123763178033262338779658663222193262651519787452057819826151396265479872321981e-24,
4.382497519887344059655258424644950704152853920980276818591850390318129841119647e-25,
2.7186389576555759138820356271448872774947633995904411012405376808492919628590506e-27,
-1.1458896506774580369743945579295750204092666668699824045661401768984212546138787e-27,
-2.4415318181927522978909188671073094149415439741835244151526434958860319358446682e-29,
2.3505675086790434606664221960472243599181441248526662245549521169413326741733033e-30,
8.669258995621298717800714563004282859479548850038258850838724790295883213896554e-32,
-3.723977985489462680382745552671764711614778698594250205029269305778538368069886e-33,
-2.1646033266321799468220479128490325581663125661515692147696595451120812363930903e-34,
4.203457751935555749203270075437513679883585299088583490129455804307114122286297e-36,
4.244052494804297215797687543359423065727104705085375433170467492601781347640104e-37,
-2.1231392753906157383843052537658427398583379292318669518502402669687755858823324e-39,
-6.813496373118564864349052387612632119903467123774393160507783275039315832205749e-40};
// Maple: evalf(series(diff(cos(Pi/8*(4*z^2+3))/cos(Pi*z), z)/(32*Pi^2)+diff(cos(Pi/8*(4*z^2+3))/cos(Pi*z), z$5)/(120*Pi^4)+diff(cos(Pi/8*(4*z^2+3))/cos(Pi*z), z$9)/(10368*Pi^6), z=0, 38));
// Mathematica: N[Series[D[Cos[Pi/8*(4*z^2+3)]/Cos[Pi*z], z]/(32*Pi^2)+D[Cos[Pi/8*(4*z^2+3)]/Cos[Pi*z], {z,5}]/(120*Pi^4)+D[Cos[Pi/8*(4*z^2+3)]/Cos[Pi*z], {z,9}]/(10368*Pi^6), {z,0,78}], 80]
public static final double[] DC3 = {
0.0013397160907194569042698357299452281238563539531678386569289925594833800871811798,
-0.003744215136379393704664161864462396581284315042446001020488345395501319713045551,
0.001330317891932146812031854722402410509897088246099457996340123183515196888263071,
0.0022654660765471787114760319905210068874119513448871865405689358390986959711214106,
-0.0009548499998506730415112255157650113355104637663298519791633424726946992806658956,
-0.0006010038458963603912075805875795611286932555907537579329769784072390871266471527,
0.00010128858286776621953344349418087858288813181266544865585870025117392863374779861,
0.00006865733449299825642457428364865218534328592530073865273869547284481941105060958,
-5.985366791538598159305933853289474476033254319520777140355079450311296076398332e-7,
-3.33165985123994712904355366983830793171285955443637487051019057060568872956295e-6,
-2.1919289102435081057184842192253694457056301094787176328502199928079472310677209e-7,
7.890884245681494410555248261568885233534195350876097985016870653592807297722941e-8,
9.41468508129526215165246515670888721434440703062285787060390697195816617233733e-9,
-9.570116210883480301880722847736899414920424990844021810115468872811044469914093e-10,
-1.8763137453470662796812970577763318771497261610950370939934010326350481628028716e-10,
4.437837679323399327464708984967982039427175136450134427877701103829299216728465e-12,
2.2426738505617353248411068573063743908847573555967383640946296048845725322165884e-12,
3.627686865735243689408255637923200993091627857438909649329814867831900563004191e-14,
-1.7639809550821581607831121498067405612829056369595996874090447022130186603011647e-14,
-7.960765246786777757290345179277877672969068290389354910445419703993693619905826e-16,
9.419651490589690763914895025694423958555439910507587271684011367592679056089096e-17,
7.133103854569657824556667924637208733076137253777613086648835921659278195880674e-18,
-3.289910584554624321179665258492719604389867767706730329578387560456883113849552e-19,
-4.180730374898459291362924870562363545456098499893508469921618986694281682179048e-20,
5.550542071646333789782116402662976359558940175392938033703401483591298082182587e-22,
1.7870441906260123858717636353127488582980187518683339734105072221029271545889173e-22,
1.331280396465609428629734301456596911495766449193494655875984603950395330646233e-24,
-5.818610611090987516179216596088520206267870242969322822752311337488525847711228e-25,
-1.4019036088526555374364967097960412447326079695863802828805235344426680330368205e-26,
1.4641320211626254148997752501860798089334733220831445783786891177657679796555688e-27,
6.02332655108914231894545302168540534775476763292822981011798811478407558676743e-29,
-2.8064472319113607480413277200041961058924502875599284388627977593567952984627978e-30,
-1.8065060055924548468166679975772190204281290392132976714058746943222867824547636e-31,
3.779508331934081109538275143960178072816211713033459437067101283961906998805713e-33,
4.214558052947562754928267311962627941300036513813646793136217341959757887604597e-34,
-2.2110619283398807703089110108495251373369608027039372389420927090703989012463229e-36,
-7.977857191491540240197869206644086240230293731794895306614670662176495711819498e-37,
-5.134879815416697465299965219246691353718718876508043721203193132000758105946362e-39,
1.2486406302153718700908292104194463596234890838129830954576262777222039185771739e-39};
/*
* Stieltjes Constants from 0 to 78, to 256 digits each.
* ref: http://pi.lacim.uqam.ca/piDATA/stieltjesgamma.txt
* also called the gamma constants defined by
*
*
* / m \
* |----- n| (n + 1)
* | \ ln(k) | ln(m)
* lim | ) ------| - ------------ = gamma(n)
* m -> infinity | / k | n + 1
* |----- |
* \k = 1 /
*
*/
public static final double[] Y = {
.5772156649015328606065120900824024310421593359399235988057672348848677267776646709369470632917467495146314472498070824809605040144865428362241739976449235362535003337429373377376739427925952582470949160087352039481656708532331517766115286211995015079847937,
-.7281584548367672486058637587490131913773633833433795259900655974140143357151148487808692824484401460407720727888674475946468021218957925934357889512942805222349515279549606111502095344684131064742443502359366559538469614380259381045738025493664557651677028e-1,
-.9690363192872318484530386035212529359065806101340749880701365451850755382280414171978197381374537319286223858587946823125346497950962571972526493648255902282233425225376030952454650839481623874159222094228123258327703499005518661324301612485127438367384026e-2,
.2053834420303345866160046542753384285715804445410618245481483336913834492112970053570557166228566702972851647965455643681856998286631518491198828868652927507879634329919223749694521937588516086128932900100887582794153232910617743621951263465535646918550222e-2,
.2325370065467300057468170177526068000904469413784850990758040907124841005315521900301678059039306360827843551103225522196456664007682437918861215754578332362815081585973614343456254349981107648311254210559424139592687296840743156065574648306992970376230434e-2,
.7933238173010627017533348774444448307315394045848870757342562698231482118017152023797200635876308162719168578623728950693993277932862610560981556563334528255145467565669705027727800328021356905705583506896973325036121197655863337023278457363824591927681467e-3,
-.2387693454301996098724218419080042777837151563580786314764253073910675599929638714368611141285111024780673075909533038020656912269595124699717764644539646672994359920016312185594700697656216552224200467213493615215357142501593344546382399161688323344633459e-3,
-.5272895670577510460740975054788582819962534729698953310134042268856827324651411821440413807979996094255347137014747313651473070509002813384872173815912447148812297961891402918386808326741994669807197014678473723857395756624902062083941316454527809794259124e-3,
-.3521233538030395096020521650012087417291805337923503566573315073642817765060653010801409187200115151480243957720152737286032860943501971136758373996071542419096556138574571993689232705602040409831370056942984921502852878319887965827056475310881183605291025e-3,
-.3439477441808804817791462379822739062078953859444162975929190484315010334446152837095754389345718990812939708751106559999723650791217087757476384733602840643363955402889741500455608351851986205711990705391789569312430556033918346536209762876458392962080569e-4,
.2053328149090647946837222892370653029598537741667643038402087143530090240710691751984960510609028168654630716692437652938609455701636670314763888351107401248788037757774478758676467051586842465830033648294891261556376188509817851906503013130840649822003101e-3,
.2701844395439035266729020820679556738278420586884025039737358031367999909642929802378444607202380543341892065433898331362430539345163022251660977905645827208257807545662673885178807828093358372485533868496985893326451504654464211037386959473080948618383043e-3,
.1672729121051401933535015433411834466078066328055658280477909376512195970327407625539042834685454860827918008130473096673223305416815315435148622550674827969874566633280326548214334209784161729704490822545521988490380808808815410064684131411221199776802669e-3,
-.2746380660376015886000760369335518152678533767039553609283308916757051860700887286766227018014141226063021263616344526017942940219226384963138784380546201092996086073554616887396220116191432159038003288891331098518783382994530877461169787303572031210085377e-4,
-.2092092620592999458371396973445849578315442115060695624342083257187577618413479238849643630363170068978952103732270941025164202162406217483524889032192155723532675386434812392932022134837802510909806951284079809204130775034571304740902331856694608730746506e-3,
-.2834686553202414466429344749971269770687029807176752539699432929676256905331671583502753305306099359983296641743658578448670204816395094978958650260714071371637925247680241849293162055953372734373236183678636434144439111527617109957199974180603721462395347e-3,
-.1996968583089697747077845632032403919157649740340612798596671625543805947413858376185052901045229228152050749963179893268016715236270037554630588742666500589733359678401153567212058999564688677646468080389369421514423787946034894284978610156860905576783237e-3,
.2627703710991833669946659763051012281607869292911406079711751835228318283659619892378138323561685615911623560201540792781969494575153922147852554290415989679216348097499078673743176921693516030034263511744512517839540600579140351515313919384582936117575383e-4,
.3073684081492528265927547519486256455238112907314616910811036523148083902097289937656175556967012404059095414514102941951119674092289417995555858007852262090239169157743457758869727907667465462418873038971056792798849296000885600799035155113134156928909482e-3,
.5036054530473556290555964377171600353212698076494978373237909270104380947646223189527024912899340799999802379685872863039429327259976022887863525558688062335605764854361061913564269294911630304700024202875309737842304685438543203315544401816345818487684388e-3,
.4663435615115594494005948244335505251131434739256889976707266280985445821300329007010634781743483037676276776893978664788490376098061008113591441797256336823512267157959337408681128870085117167176652714745827612534802328769644422488731525593967185587090795e-3,
.1044377697560001158107956743677204910444282507055467478343714867390804411994132201971857629970557612477080276816174297098442819046793799873530097156786216211170154344305780995660062733094223612700160596820798224374455841978660825820242682142793915007842212e-3,
-.5415995822039977016551961731741055845438609287007488018391913163842120274727846608325326997754074546503753106668640607229437483993682169764132200837068069923525151709033207834551632712814364366899723899724930759778803264577711209436089086578419457274846364e-3,
-.1243962090408245779299741599537165809147028113964637716532971108378003227300447476688043928770660618906589245188584132576689392153326370316493290511316121734714766939840656684143340621090548028988852205331608344386554756230080950750377804966175863406283901e-2,
-.1588511278903561561906196611521115857318722822144129067478194125480950383379748723977182688294225715704915149922400750354649555457261240500959167389177194357862621241155775647357272837529119488611489255817396821745210322189035753496755771351316733341251102e-2,
-.1074591952738488824724291987353173089273979331453170361409902581781368852879725083510487626853780543878731137936481194598448964551855691857004868428077492623871354826190616571737826265422531415866113138027144599171360216617932498664012392456911554072571146e-2,
.6568035186371544315047730033562152488860650604775373760992825250891170965034776663910579342625757859715232062111062915856525206876176042963292134187616474914067354036499371011291177322406733034202470236023762935497158074335393463790043477652282574744043603e-3,
.3477836913618538209007359574258811547662915663885919292269369089163601152516386090184507808325259934643247527620919916504590034421507603998744879095106816233978110202439753349023737964681719231706674211339160697022354031902450736661875203742977403043595923e-2,
.6400068531700629458107228221945863666637198144588475220590330625837093213897134487336264083586702624780911771466881249158837079615155947036988364224391544873825936603455801551951739436482654980238076705978473654568449071615955207841466403251011797640636588e-2,
.7371151770472239134412402423559402157841327488512840153180311593260094964080124902874271317941480450169928391633082168004655647838467136598965148773299440893911326321952210876313787678510143647647900141023350228313526634026921869524825211534867202695510451e-2,
.3557728855573160947913537748908402610809650649522125076131381742604895375347768268411760486644490119698820111281432172758850410765212613111042978612558180006655129918249475202003030282427138985184474816070832944619701532581247303970119806166784524080913113e-2,
-.7513325997815228933135160081576145616636587418058437829820653897726656851364608736093406575498735199953375557645227668649877454170501745904952874352569833828340361752923325058378630036421872568935701095205574194985993332448759010555982110176282553449891202e-2,
-.2570372910842040179348788378034991655408420213709272996040553488073373925092915194869402974674313960730940827885805986079503641578184306369509419528819255356778241434806326040117004842490643574687237090396478809065180424485158191278852413572924082385053692e-1,
-.4510673410808021990498284969956376278181476720118751914813317935089473799365486780079426205395715048231336142622172311472080346051129198009798869840229135326813527696281135231523051833221278728337033589841096529250915588639261001568781069882956884511058368e-1,
-.5112692802150846442507582003801215757213099693370947031283705080222204757165161391299384814318941989350085938186440763932854104808109240365643509465403766309112448633408990761899675968647705676410731088908908770878621830867075270142641783507042859178782092e-1,
-.2037304360386131270575189730254735763855514540127568404226904414244063724030988503350463213893919466606979495327877395077626203087646069193281918128083913334868246722812020110757918056153158263567517772557098298030827761720020741589113319214710546324868855e-1,
.7248215881681133373380044422036406713494156746516600301109791139709584630115609076184768490496514066910360733891536130570598692290165869195273978736246742908618723458316488977615459103966319968155863913816498268488587418654995797804155697655649958847357895e-1,
.2360263822743015027209817621993795633447977318546636606795696524336922591383506319852601197035035699203623244114544400619644905611166062223529956334728610781278059048805132264984375254618970256448247285280843274150107341682480156517967257924219186788145330,
.4289634463848091527368615465389604104951855560836298508881511467174782165406052598052578837703479513149605271888650666596964536012997065102084281647972845368239473903765489789230269010448415666019284057957391635619051037937314897060412487116366199455816836,
.5179218426929237189788930575162080963032869116382440388334761465713068965780043079965859932817502694727319695029057167172255798781972489650526343539907081526696209591694159811807914277744490491038137744209287798148227736083094114236529502428204747874931539,
.2487215593946154650844919104403834212137661679529456385350509654042314398657765133858509357834519851660462686780038493302932372007287500470374521580805939391035285372957104115822097373824399880947615656580184641803366839892091737835298438895206210595752375,
-.7195748469013003506888739112196854239261748831904649437785449263509786356293101897746613034720604271142999671606071191146849003123224065620009891082439621461705375083652807042878644516387056361921714149226264455652409110895061126053434853106969343380563178,
-2.638794927335734535788281675648811310351782987035211499393243485907022239259505477040826570395791839498801399715723709634295474856557592397489594583251684015695249594247301673922474234026168332480339091413459364363081675429428395332081292613817734336565494,
-5.264930312355023828811032859580336606977042993956806905911825107752096822582823647571129789899774007449077183706697896011698161033442136588696911829176438099711663253191742572376731229116446238288895074259071273499782678262582441265329247305947655986144330,
-7.188745889503527282342094824577664215932574859281338805833810538667337501527011967915372049590948156198532169549971970898863800579381929252662783608393442431305718388587696952733141648850458812574971021050868587199490079795392192132425737225940758618726619,
-5.072344589916372492298940404798877527548898547920341433576114007970208835005861247222957450067358896625318542197749232212662512002598509927706415764052961176009738698115190727795940434449848894227264093298941761645790234028006626255339596450726680973432486,
6.609915609096965813839975106591453976121624142676258962466161263230138247955950680501240606225730339947058738765837375315012758818853754069379249379465003451583201983190721503025985727108804064481134263041435677655221268593105524179459213774579064542886341,
34.03977498215874824766115211222887543481585062040728845880766195415091850111097098102234038334063582255146136304735662018166909676792633649172593400903096852662977956340472884566589366552943189154254333330735508711818454888919225114589304435439875918866231,
78.68247976324258495603848420938847587592859021606368068347311248131245045816477978354222279127347778484079585199133838207604437335391341578617869858249504960215493811609322620525071575891947562789820590429774578807866291149245067581168982559771813175765951,
125.8443876319784690933640869642634548210830426469704980639576282947523289773055415013393636381818820365174280709651417996658374631556841875987387400798841785568945454815405004576022607269753629090377417076709892483708691350430892879564872582173161084734278,
126.8236026513227165967252536486575555384835759448901701980956993469732544041271419075472839202481342000655527466907773263202970132939623809589591513912865283594558393685656496366403863160270130724104654611609335672863609966882450434670623623037390894982865,
-19.19691187302785580049992278889461000488617138521125094955804692768632497077431894010336425512641087536957362345904530571260115521167316919248856770615789826449707900700147413646023179865419434659545981369663884566897807702752807188599160262261877584723048,
-463.1889230267168108085343582392362931366116957180006901624675536855778259610180865548529674806333795445784720929015557429014573440317655361459554522755159806774751854061019646746026001962717761365205206395869989959129560170027580385380148222072396574437614,
-1340.659144376892189727101963668908904813680425823094277360983924970123545905951320804164099765412339187206633285729948584751525184352621143592938185171889188832432976967119173814211291335944639480016298975541814145863037680692144453474530167024849384966632,
-2572.454740404435516763574381743194537144349074129635190025656675261689968560135282533680795608528937664815193978544465137589608940353479663547865399362584761794796720486829475401161510062152263672635951091948051219547961625385885682988539181752335571182500,
-3457.141208645389953809462307608548197267392571262945382531901198419835265449139114139752724233485244785535339119102051777751947298714580782741473753259866854277965873748702018770556207132668621431246868940695237459978570056725932042526772704517088887009050,
-2055.275816231974304572825156345659341714378586681402878963865132625780739633561673788853189681295671720531311167392431020178456949604170241477352885604106843954614982380859102212646287075146135017827460000558232950054762819030973497931729190368748362000642,
5372.282213203191284181833545959014329555896642905224954409370153194551639289251004905214862802153702614891093139187266989686294985772286939348850809250994703278188368030520223602114426496922514344077289177925193404535132017379204347643038237561684778349535,
24019.38937760698818204861035985736409058929002953145915799769330693343585546963061640387520046045702663578653894052569085070940959579119305407994509817271201272546721845612222693895881739318046735749910581720490135833336177178720592740120790968916641082098,
57424.31929696407550657104394311255386400824370256752620991647966953367902572223109625676082012930154382556432735615395354528456397119780281123421908197993868853546446676051766559695367292479004717927284373185020644824412329349572910288157946256744189407140,
98543.25459014604211093211428941711531650104882341554197930622783608489036287602715386941804646663591106764763550763071863725791968111497783011529453607923260637137817777048517149527447460321197286999081445397775020004411932959031469803884925185616975390011,
111670.9578149410793387893403211563974853622621861860070492558245106321152197978896356784986709659246398447028682342515620904866717282773920131267534144689106562607331771415956711044043588809723539995371146389025477672830672938535201055031258424853698622521,
5333.665210500764343403713072261136718914593293565738489694853347359352589030809494678259291885891979613064318888829142263676324267800058016249399128627054877573090524750544029388489126257672223385886733854495868967399358045126339726416940001003776331780669,
-390972.6873133963957775428164347301012865910198508746441638769290837847013047456217619412022961983123163124272712579711729696456704271694618158088390339217519866909714445427931569604142174394070839878737071843151424174567821468441597847504269831119565319909,
-1303180.712532519808573578260908777678044948332570067129963421421848029593041641458697133568977980576700883270277981455463933985088650175081474094621803307108859599115906956541023262677524307005797980356671824629484862625887654008181910920206214383524051245,
-2845076.552608612116523243100237370870167655675924216498192869458404187329953640177299560183025897558495297082006826021694564155486292072145777913453704712722953138646764731475253810351084080951541575328521843225182807547286142617638437012547115115046403931,
-4540526.609737724100509220867003971251048957338640918478864644401431771260187110948708426225730696673484910608169992239039359208562183905400100070421973273676747789972100524122177059432652884762115926751661713705281886452057166399772740063853326419021621033,
-4341905.139001516198415670264383693842260958150127609160422048895643211404947195718257471803919996372167852148973302363686896828779612377060187735478109745765995707365214973502468316183453023901759425272748017178186339655775494652737519189536753913543805680,
2871566.945972460509905357306147525690106604257063853632662792335691123095953849148759187546180165016153744782976866579448776215707008569628936807475513691359949909887658409137518529362425919225421409999326669652492263291715447395177074780931961343784615131,
26604908.54668677092425521912451936480795299150646426379923783074812038437400291966231913301672803147593025933983520666997287407005167498500146308540816725205740171309465570488989279619206587140609236965698637546585522770792996633444924580867051639968204913,
79321663.11929906059211001875506986109078678605929299821733167638956228811094702496866006501239037925742409911928107256247873459490010385482553313165643858925233075421940693131005923399599328970140465301608533561129008200715549168186165980180247842021792257,
166215134.0468254355839825083764775026922493156873793437567024004040720676074041053803255270535873330605351293137839271608605683647864515142266769019278900135634372572577287785416673156462232216791854730153546523662690892362166893419994060430067089918268485,
255153258.3082389934909848078277768987902985514378076503823427021825601645614601862599207385980737560906754309716204100869275599148675590710569782697323107792348115172035957067240704301036234325777779946135648388560892047021038514968620844931091344338610286,
212655631.6918540369512019248627158396680614022195978324871483336108798420688927107279671233050594954058347952103381180030465863386349837153315936212092445328817755413706057708197992558132570343461837062889786366607647313628680221334335862993688051677647064,
-298767089.4311661838592139845456232588222876086992170490259044012663702238324435706623905293153630798969724334390118682919837048033136392454203199753628085167331437818516158612262299723479084451715092046370319754099231070567632457508936168937828037690257857,
-1919487427.732802396229627757729327898023244830602085729304679210428118470905660169503320644717346154413202421403219588184732013410426970230132448744061230223078726672201628641965688174011380164991661246163863144544756484425183731247748949286364250669027383,
-5515574258.129220269427426037306452066936170169171072411797916588895750116790116120042606241013411261739570410392314324043817608753827749236198030823299522969460857196981095390178299797003363459101202590130435740820533907989476579686558014505421730147475846,
-11483450987.92625603025962308750354819358989636858236343418922095146003529652099454932564500092640974706164032396286399805090630030297913074096080965875780082646299473016444439508070872009844923178137154154440180991389231196962826618318021120909673249402227,
-17570152277.77726386163608615618525785039204899986664599956286229502140896936467083284521308786084527317826035812378168370902350943468812664885992884478165346500022035578688139196146186122588937724007564250471442030547825810788316951289967818338033762342923
};
private constants () {
// private constructor to prevent instantiation
}
}
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileNotFoundException;
import java.io.IOException;
public class functions {
private static double rootpi = StrictMath.sqrt(StrictMath.PI);
//private static double root2pi = StrictMath.sqrt(2*StrictMath.PI);
private static double oneonrootpi = 1/rootpi;
private static double twoonrootpi = 2/rootpi;
private static double logtwo = StrictMath.log(2);
private static double pi2on12 = StrictMath.pow(StrictMath.PI, 2)/12.;
private static int INFINITY = 100000;
private static double PRECISION = 1E-12;
private static final int[] PRIMES =
{2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,
61,67,71,73,79,83,89,97,101,103,107,109,113,127,
131,137,139,149,151,157,163,167,173,179,181,191,
193,197,199,211,223,227,229,233,239,241,251,257,
263,269,271,277,281,283,293,307,311,313,317,331,
337,347,349,353,359,367,373,379,383,389,397,401,
409,419,421,431,433,439,443,449,457,461,463,467,
479,487,491,499,503,509,521,523,541,547,557,563,
569,571,577,587,593,599,601,607,613,617,619,631,
641,643,647,653,659,661,673,677,683,691,701,709,
719,727,733,739,743,751,757,761,769,773,787,797,
809,811,821,823,827,829,839,853,857,859,863,877,
881,883,887,907,911,919,929,937,941,947,953,967,
971,977,983,991,997};
private static int[] primes = PRIMES; // default values in case of file error
static {
// load primes array with PARI/GP generated file (5000 primes)
try {
BufferedReader pf =
new BufferedReader(new FileReader("primes.txt"));
String ps = pf.readLine();
String[] pe = ps.split(", ");
int pel = pe.length;
primes = new int[pel];
for (int i=0; i<pel; i++) {
primes[i] = Integer.parseInt(pe[i]);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// Taylor coefficients for 1/gamma(1+x)-x...
private static final double c[]= {
+0.5772156649015328606065120900824024310421593359,
-0.6558780715202538810770195151453904812797663805,
-0.0420026350340952355290039348754298187113945004,
+0.1665386113822914895017007951021052357177815022,
-0.0421977345555443367482083012891873913016526841,
-0.0096219715278769735621149216723481989753629422,
+0.0072189432466630995423950103404465727099048009,
-0.0011651675918590651121139710840183886668093337,
-0.0002152416741149509728157299630536478064782419,
+0.0001280502823881161861531986263281643233948920,
-0.0000201348547807882386556893914210218183822948,
-0.0000012504934821426706573453594738330922423226,
+0.0000011330272319816958823741296203307449433240,
-0.0000002056338416977607103450154130020572836512,
+0.0000000061160951044814158178624986828553428672,
+0.0000000050020076444692229300556650480599913030,
-0.0000000011812745704870201445881265654365055777,
+1.0434267116911005104915403323122501914007098231E-10,
+7.7822634399050712540499373113607772260680861813E-12,
-3.6968056186422057081878158780857662365709634513E-12,
+5.1003702874544759790154813228632318027268860697E-13,
-2.0583260535665067832224295448552374197460910808E-14,
-5.3481225394230179823700173187279399489897154781E-15,
+1.2267786282382607901588938466224224281654557504E-15,
-1.1812593016974587695137645868422978312115572918E-16,
+1.1866922547516003325797772429286740710884940796E-18,
+1.4123806553180317815558039475667090370863507503E-18,
-2.2987456844353702065924785806336992602845059314E-19,
+1.7144063219273374333839633702672570668126560625E-20,
+1.3373517304936931148647813951222680228750594717E-22,
-2.0542335517666727893250253513557337966820379352E-22,
+2.7360300486079998448315099043309820148653116958E-23,
-1.7323564459105166390574284515647797990697491087E-24,
-2.3606190244992872873434507354275310079264135521E-26,
+1.8649829417172944307184131618786668989458684290E-26,
+2.2180956242071972043997169136268603797317795006E-27,
+1.2977819749479936688244144863305941656194998646E-28,
+1.1806974749665284062227454155099715185596846378E-30,
-1.1245843492770880902936546742614395121194117955E-30,
+1.2770851751408662039902066777511246477487720656E-31,
-7.3914511696151408234612893301085528237105689924E-33,
+1.1347502575542157609541652594693063930086121959E-35,
+4.6391346410587220299448049079522284630579686797E-35
};
private functions () {
// prevent instantiation
}
/**
* error function
* ref: Java implementation of C function from zetagrid code (math.cpp)
* @param x
* @return
*/
public static double erf (double x) {
double cut = 1.5;
double y, r = 0.0;
y = functions.fabs(x);
if (y < cut) {
// power series expansion
double ap = 0.5;
double s, t, x2;
s = t = 2.0;
x2 = StrictMath.sqrt(x);
for (int i = 0; i<INFINITY; i++) {
ap += 1;
t *= x2/ap;
s += t;
if (functions.fabs(t) < 1e-35 * functions.fabs(s)) {
r = x * functions.oneonrootpi * s/StrictMath.exp(x2);
break;
}
}
} else {
// continued fractions
double an, small = 1e-300;
double b,c,d,h,del,x2;
x2 = StrictMath.sqrt(x);
b = x2+0.5;
c = 1.0e300;
d = functions.recip(b);
h = d;
for (int i=0; i<INFINITY; i++) {
an = i*(0.5 - i);
b += 2.0;
d = an*d+b;
if (functions.fabs(d) < small)
d = small;
c = b+an/c;
if (functions.fabs(c) < small)
c = small;
d = functions.recip(d);
del = c*d;
h *= del;
if ((del - frac(del)) == 1.0 && del < 1.0e-300)
break;
}
r = 1.0 - functions.oneonrootpi * StrictMath.sqrt(x2) /
StrictMath.exp(x2) * h;
}
if (x > 0.0)
return r;
else
return -r;
}
/**
* complementary error function
* ref: Java implementation of C function from zetagrid code (math.cpp)
* @param x
* @return
*/
public static double erfc (double x) {
double cut = 1.5;
double y, r = 0.0;
y = functions.fabs(x);
if (y < cut) {
// power series expansion
double ap = 0.5;
double s, t, x2;
s = t = 2.0;
x2 = StrictMath.sqrt(x);
for (int i = 0; i<INFINITY; i++) {
ap += 1;
t *= x2/ap;
s += t;
if (functions.fabs(t) < 1e-35 * functions.fabs(s)) {
r = 1.0 - x * functions.oneonrootpi * s/StrictMath.exp(x2);
break;
}
}
} else {
// continued fractions
double an, small = 1e-300;
double b,c,d,h,del,x2;
x2 = StrictMath.sqrt(x);
b = x2+0.5;
c = 1.0e300;
d = functions.recip(b);
h = d;
for (int i=0; i<INFINITY; i++) {
an = i*(0.5 - i);
b += 2.0;
d = an*d+b;
if (functions.fabs(d) < small)
d = small;
c = b+an/c;
if (functions.fabs(c) < small)
c = small;
d = functions.recip(d);
del = c*d;
h *= del;
if ((del - frac(del)) == 1.0 && del < 1.0e-300)
break;
}
r = functions.oneonrootpi * StrictMath.sqrt(x2) /
StrictMath.exp(x2) * h;
}
if (x > 0.0)
return r;
else
return -r;
}
// test erf,c for x > 0
public static double erfg(double x)
{
return oneonrootpi *
incGamma(.5, StrictMath.pow(x,2),0);
}
public static double erfgc(double x)
{
return incGamma(.5, StrictMath.pow(x,2),0)/
rootpi;
}
public static double erf2(double x)
{
double sum = 0.0;
for (int k=0; k<INFINITY; k++)
{
sum += StrictMath.pow(-1, k)*StrictMath.pow(x, 2*k+1)/
factorial(k)*(2*k+1);
}
return twoonrootpi * sum;
}
public static double erf2c(double x)
{
return q_gamma(.5, StrictMath.pow(x,2),0)/
rootpi;
}
/**
* reciprocal function
* @param x
* @return
*/
public static double recip(double x) {
if (x == 0.0)
return 0.0;
return 1.0/x;
}
/**
* combine StrictMath.floor and StrictMath.abs to implement c++ fabs
* @param x
* @return
*/
public static double fabs(double x) {
return StrictMath.floor(StrictMath.abs(x));
}
/**
* fractional function {x} = x - [x]
* @param x
* @return fractional part of x
*
* caveat: this function does not seem to play well with negative input values
*
*/
public static double frac(double x)
{
return x - StrictMath.floor(x);
}
/**
* check if argument is an even integer
* @param n
* @return 1 if n is even, else -1
*/
public static int even (int n) {
if (n%2 == 0)
return 1;
else
return -1;
}
/**
* Riemann-Siegel theta function using Stirling series
* @param t
* @return
*/
public static double theta (double t) {
return (t/2.0 * StrictMath.log(t/2.0/StrictMath.PI) - t/2.0
- StrictMath.PI/8.0 + 1.0/48.0/t + 7.0/5760.0/t/t/t);
}
/**
* moebius function
* implemented as series representation
* ref: http://functions.wolfram.com/13.07.06.0002.01
* @param n
* @return
* 0, if n has >= repeated prime factors
* 1, if n = 1
* (-1)^k, if n is a product of k distinct primes
*/
public static long moebiusmu (int n) {
// test for zero value
if (n == 0)
return 0;
double m = 0.0;
for (int k=1; k <= n; k++) {
m += (functions.kdelta(functions.gcd(n, k), 1)
* (StrictMath.cos((2*StrictMath.PI*k)/n)));
}
return (long) StrictMath.round(m);
}
/**
* Mangoldt function
* @param n
* @return 0 if n is not a power of a prime p,
* ln(p) otherwise
*/
public static double mangoldtLambda (int n) {
int plen = primes.length;
int klim = 200;
double powerof = 0.0;
for (int p = 0; p < plen; p++) {
for (int k = 1; k < klim; k++) {
if (n == StrictMath.pow(primes[p], k)) {
powerof = primes[p];
break;
}
}
}
if (powerof > 0) {
return StrictMath.log(powerof);
} else {
return 0.0;
}
}
/**
* Summatory mangoldt function
* @param x
* @return double s
*/
public static double psi(int x) {
double s = 0.0;
for (int n = 1; n < x; n++) {
s += functions.mangoldtLambda(n);
}
return s;
}
/**
* repetitive prime factor counting function
* @param x
* @return double s
*/
public static int bigOmega(long n)
{
int factors = 0;
// for each potential factor i
for (long i = 2; i <= n / i; i++) {
// if i is a factor of N, repeatedly divide it out
while (n % i == 0) {
factors++;
n = n / i;
}
}
// if biggest factor occurs only once, n > 1
if (n > 1) factors++;
return factors;
}
/**
* Liouville Lambda
* @param long n
* @return int
*/
public static int LiouvilleLambda(long n)
{
return (int)StrictMath.pow(-1, bigOmega(n));
}
/**
* Summatory Liouville function
* @param long n
* @return int
*/
public static int L(int n)
{
int sum = 0;
for (int k=1; k<=n; k++)
{
sum += LiouvilleLambda(k);
}
return sum;
}
/**
* another Summatory Liouville function?
* @param long n
* @return int
*/
public static int T(int n)
{
int sum = 0;
for (int k=1; k<=n; k++)
{
sum += (LiouvilleLambda(k)/k);
}
return sum;
}
/**
* Kronecker delta
* @param n1
* @param n2
* @return 1 if n1 == n2, 0 otherwise
*/
public static int kdelta (int n1, int n2) {
if (n1 == n2)
return 1;
else
return 0;
}
/**
* gcd
* @param int m
* @param int n
* @return gcd of m,n
*/
public static int gcd(int m, int n) {
if (m < n) {
int t = m;
m = n;
n = t;
}
int r = m % n;
if (r == 0) {
return n;
} else {
return gcd(n, r);
}
}
/**
* Mertens summary function M(n)
* @param n
* @return
*/
public static int M (int n) {
int m = 0;
for (int k = 1; k <= n; k++) {
m += functions.moebiusmu(k);
}
return m;
}
/**
* Binomial function
* ref: http://functions.wolfram.com/06.03.02.0001.01
* @param n
* @param k
* @return
*/
public static double Binomial(int n, int k)
{
return factorial(n)/(factorial(k)*factorial(n-k));
}
/**
* factorial function
* @param n
* @return
*/
public static double factorial(int N)
{
int n = 1;
double f = 1.0;
do
{
f *= n;
n++;
} while (n <= N);
return f;
}
/**
* return a Stirling number of the first kind
* @param n
* @param k - partitions
* @return
*/
public static double Stirling1K(int n, int k)
{
// special value 1 if n, k = 0
if (n == 0.0 && k == 0.0)
return 1.0;
return factorial(n) * Binomial(k, n);
}
/**
* logarithmic integral function
* @param z
* @return
*
* ref: http://functions.wolfram.com/06.36.06.0015.01
*/
public static double Li(double z)
{
double z1 = z - 1;
double l2 = (StrictMath.log(z - 1) - StrictMath.log(1/z1))/2;
double s1 = 0.0;
double s2 = 0.0;
for (int k=0; k < INFINITY; k++)
{
s1 += (StrictMath.pow(-1, k))/factorial(k+1);
s2 = 0.0;
for (int j=1; j <= k+1; j++)
{
s2 += (BernoulliB(j)*Stirling1K(k, j-1))/j;
}
s1 *= s2;
s1 *= StrictMath.pow(1-z, k+1);
}
return l2 + constants.EM + s1;
}
/**
* extended Gamma function
* @param s
* @param N
* @return
*/
public static double PI(int s, int N)
{
double fn = functions.factorial(N);
double fs = functions.factorial(s+N);
return (fn/fs)*(StrictMath.pow(N+1, s));
}
/**
* extended Gamma function for double arguments
* @param s
* @return
*/
public static double PI(double s)
{
int n=1;
double result =
(StrictMath.pow(n, 1-s)*StrictMath.pow(n+1, s))/(s+n);
for (n=2;n<INFINITY;n++)
{
result *= (StrictMath.pow(n, 1-s)*StrictMath.pow(n+1, s))/(s+n);
}
return result;
}
/**
* Gamma function
* ref: java implementation of zetagrid c++ code (math.cpp)
* @param z
* @return
*/
public static double Gamma(double z) {
double ss = z;
double f = 1.0;
double sum = 0.0;
double one = 1.0;
int n = 43;
while (ss > one) {
ss -= 1;
f *= ss;
}
while (ss < one) {
f/= ss;
ss += 1;
}
if (ss == one) {
return f;
}
ss -= 1.0;
for (int i = n-1; i >= 0; i--) {
sum = c[i] + ss * sum;
}
return f/ (ss * sum+1);
}
/**
* Beta function
* ref: Weisstein, Eric W. "Beta Function."
* From MathWorld--A Wolfram Web Resource.
* http://mathworld.wolfram.com/BetaFunction.html
* @param p
* @param q
* @return
*/
public static double beta(double p, double q)
{
return (Gamma(p)*Gamma(q))/Gamma(p+q);
}
/**
* Generalized Incomplete Gamma (3 arg)
* ref: http://functions.wolfram.com/06.07.06.0002.01
* @param a
* @param z1
* @param z2
* @return
*/
public static double incGamma(double a, double z1, double z2)
{
double z1a = StrictMath.pow(z1,a);
double z2a = StrictMath.pow(z2,a);
double sum2 = 0.0;
// check zero values for z2,z1 to avoid NaN, +/- Infinity
if (z2 != 0.0)
{
for (int k=0;k<INFINITY;k++)
{
sum2 += (StrictMath.pow(-z2, k))/
((a+k)*factorial(k));
}
}
double sum1 = 0.0;
if (z1 != 0.0)
{
for (int k=0;k<INFINITY;k++)
{
sum1 += (StrictMath.pow(-z1, k))/
((a+k)*factorial(k));
}
}
double result = (z2a*sum2);
if (result != 0.0)
result -= (z1a*sum1);
else
result = (z1a*sum1);
return result;
//return (z2a*sum2) - (z1a*sum1);
}
/**
* Generalized Incomplete Gamma (2 args)
*
* @param a
* @param z1
* @return
*/
public static double incGamma(double a, double z1)
{
if (z1 == 0.0)
return Gamma(a);
double result = StrictMath.pow(z1,a);
double sum = 0.0;
for (int k=0; k<100; k++)
{
sum +=
((StrictMath.pow(-z1,k)/(a+k)*factorial(k)));
}
return Gamma(a) - (result*sum);
}
/**
* Generalized Incomplete Gamma (2 args)
* alternate experimental version
* ref: Spanier & Oldham
* @param v
* @param x
* @return
*/
public static double incGamma2(double v, double x)
{
double g,p,j,f = 0.0;
g = p = 1.0;
double vl = v+1;
while(vl <= 2.)
{
g *= x;
p *= vl;
p += g;
vl++;
}
double j2 = (5*(3+StrictMath.abs(x))/2);
j = j2 - frac(j2);
f = 1/(j+vl-x);
do {
j -= 1;
f = (f*x+1)/(j+vl);
} while (j > 0.0);
p += (f*g*x);
double vl2 = StrictMath.pow(vl, 2);
g = ((1-2/7*vl2)*(1-2/3*vl2))/(30*vl2);
g = ((g-1)/12*vl) - vl*(StrictMath.log(vl)-1);
f = p*StrictMath.exp(g-x)*StrictMath.sqrt(vl/(2*StrictMath.PI));
return f;
}
/**
* Regularized Incomplete Gamma
* ref: http://functions.wolfram.com/06.09.02.0001.01
* @param a
* @param z1
* @param z2
* @return
*/
public static double regIncGamma(double a, double z1, double z2)
{
return incGamma(a, z1, z2)/Gamma(a);
}
/**
* Incomplete gamma function
* 1 / Gamma(a) * Int_0^x exp(-t) t^(a-1) dt
* ref:
* erf.c - public domain implementation of error function erf(3m)
* reference - Haruhiko Okumura: C-gengo niyoru saishin algorithm jiten
* New Algorithm handbook in C language) (Gijyutsu hyouronsha, Tokyo, 1991) p.227 [in Japanese]
*
* @param a
* @param x
* @param loggamma_a
* @return
*/
public static double p_gamma(double a, double x, double loggamma_a)
{
int k;
double result, term, previous;
//if (x >= 1 + a)
// return 1 - q_gamma(a, x, loggamma_a);
if (x == 0)
return 0;
result = term = StrictMath.exp(a * StrictMath.log(x) - x - loggamma_a) / a;
for (k = 1; k < 1000; k++) {
term *= x / (a + k);
previous = result;
result += term;
if (result == previous)
return result;
}
System.out.println("functions.java:%d:p_gamma() could not converge.");
return result;
}
/**
* Incomplete gamma function
* 1 / Gamma(a) * Int_x^inf exp(-t) t^(a-1) dt
* ref:
* erf.c - public domain implementation of error function erf(3m)
* reference - Haruhiko Okumura: C-gengo niyoru saishin algorithm jiten
* New Algorithm handbook in C language) (Gijyutsu hyouronsha, Tokyo, 1991) p.227 [in Japanese]
*
* @param a
* @param x
* @param loggamma_a
* @return
*/
public static double q_gamma(double a, double x, double loggamma_a)
{
int k;
double result, w, temp, previous;
double la = 1, lb = 1 + x - a; /* Laguerre polynomial */
//if (x < 1 + a)
// return 1 - p_gamma(a, x, loggamma_a);
w = StrictMath.exp(a * StrictMath.log(x) - x - loggamma_a);
result = w / lb;
for (k = 2; k < 1000; k++) {
temp = ((k - 1 - a) * (lb - la) + (k + x) * lb) / k;
la = lb; lb = temp;
w *= (k - 1 - a) / k;
temp = w / (la * lb);
previous = result;
result += temp;
if (result == previous)
return result;
}
System.out.println("functions.java:%d:q_gamma() could not converge.");
return result;
}
/**
* return nth Bernoulli number in rational form
* @param n
* @return
*/
public static double BernoulliB(int n)
{
double Bn = 0.0; // return 0 if n is not even, >= 2
if ((n % 2) != 0)
return Bn;
if (n == 0)
return 1;
if (n == 1)
return -0.5;
double K = (2*factorial(n))/StrictMath.pow((2*StrictMath.PI), n);
double d = 0.0;
int pl = primes.length;
int prod = 1;
for (int i = 0; i < pl; i++)
{
if ((n % (primes[i]-1)) == 0)
prod *= primes[i];
}
d = prod;
// intermediate work field for debugging
//double nwork = StrictMath.pow((K*d), 1.0/(n-1));
double N = StrictMath.ceil(StrictMath.pow((K*d), 1.0/(n-1)));
double z = 1.0;
for (int i = 0; i < pl; i++)
{
if (primes[i] > N)
break;
if (i == 0)
{
z = StrictMath.pow(1-(StrictMath.pow(primes[i], -n)), -1);
}else {
z *= StrictMath.pow(1-(StrictMath.pow(primes[i], -n)), -1);
}
}
double a = StrictMath.pow((-1), (n/2)+1)*StrictMath.ceil(d*K*z);
Bn = a/d;
return Bn;
}
/**
* return nth Bernoulli polynomial of x using Fourier expansion
* ref: Abramowitz & Stegun 23.1.16 pp 805
* @param n
* @param x
* @return
*/
public static double BernoulliP (int n, double x)
{
// for n>1, 1>=x>=0
// for n=1, 1>x>0
// for x=0 return the nth Bernoulli number
if (x==0.0) {
return BernoulliB(n);
}
double K = -2*(factorial(n))/StrictMath.pow((2*StrictMath.PI), n);
double S = 0.0;
for (int k=1; k<100001; k++)
{
S +=
StrictMath.cos((2*StrictMath.PI*k*x)-(.5*StrictMath.PI*n))/
StrictMath.pow(k, n);
}
return K*S;
}
/**
* Periodic Bernoulli function - Bn({x})
* @param n
* @param x
* @return
*/
public static double BBn(int n, double x) {
return BernoulliP(n, frac(x));
}
/**
* return nth Euler number in rational form
* ref: http://functions.wolfram.com/04.12.06.0001.01
* @param n
* @return
*/
public static double EulerE(int n)
{
// return fixed point values
if (n == 0)
return 1;
else if (even(n) != 1)
return 0;
double K = (StrictMath.pow(2,n+2)*factorial(n)) /
StrictMath.pow(StrictMath.PI, n+1);
double S = 0.0;
for (int k=0; k<100001; k++)
{
S += (1./StrictMath.pow(2*k+1,n+1)) *
StrictMath.cos((k*StrictMath.PI)-((n*StrictMath.PI)/2));
}
return K*S;
}
/**
* return nth Euler polynomial of x using Fourier expansion
* ref:
* - Abramowitz & Stegun 23.1.16 pp 805, table 23.1
* - http://functions.wolfram.com/05.13.06.0001.01
* @param n
* @param x
* @return
*/
public static double EulerP(int n, double x)
{
// for n>0, 1>=x>=0
// for n=0, 1>x>0
// for small n (<=15) calculate using coefficients - A&S table 23.1 pp 809
if (n == 0)
return 1.0;
else if (n == 1)
return x - .5;
else if (n == 2)
return x*x - x;
else if (n == 3)
return StrictMath.pow(x,3) -
(StrictMath.pow(x,2)*1.5) + .25;
else if (n == 4)
return StrictMath.pow(x,4) -
(2*StrictMath.pow(x,3)) + x;
else if (n == 5)
return StrictMath.pow(x,5) -
(StrictMath.pow(x,4)*2.5) + (StrictMath.pow(x,2)*2.5) - .5;
else if (n == 6)
return StrictMath.pow(x, 6) - (3*StrictMath.pow(x, 5)) +
(5*StrictMath.pow(x, 3)) - 3*x;
else if (n == 7)
return StrictMath.pow(x, 7) - (StrictMath.pow(x, 6)*3.5) +
(StrictMath.pow(x, 4)*8.75) -
(StrictMath.pow(x, 2)*10.5) + 2.125;
else if (n == 8)
return StrictMath.pow(x, 8) - (4*StrictMath.pow(x, 7)) +
(14*StrictMath.pow(x, 5)) -
(28*StrictMath.pow(x, 3)) + 17*x;
else if (n == 9)
return StrictMath.pow(x, 9) - (StrictMath.pow(x, 8)*4.5) +
(21*StrictMath.pow(x, 6)) -
(63*StrictMath.pow(x, 4)) +
(StrictMath.pow(x, 2)*76.5) - 15.5;
else if (n == 10)
return StrictMath.pow(x, 10) - (5*StrictMath.pow(x, 9)) +
(30*StrictMath.pow(x, 7)) -
(126*StrictMath.pow(x, 5)) +
(255*StrictMath.pow(x, 3)) -
(155*x);
else if (n == 11)
return StrictMath.pow(x, 11) - (StrictMath.pow(x, 10)*5.5) +
(StrictMath.pow(x, 8)*41.25) -
(231*StrictMath.pow(x, 6)) +
(StrictMath.pow(x, 4)*701.25) -
(StrictMath.pow(x, 2)*852.5) + 172.75;
else if (n == 12)
return StrictMath.pow(x, 12) - (6*StrictMath.pow(x, 11)) +
(55*StrictMath.pow(x, 9)) -
(396*StrictMath.pow(x, 7)) +
(1683*StrictMath.pow(x, 5)) -
(3410*StrictMath.pow(x, 3)) + 2073*x;
else if (n == 13)
return StrictMath.pow(x, 13) - (StrictMath.pow(x, 12)*6.5) +
(StrictMath.pow(x, 10)*71.5) -
(StrictMath.pow(x, 8)*643.5) +
(StrictMath.pow(x, 6)*3646.5) -
(StrictMath.pow(x, 4)*11082.5) +
(StrictMath.pow(x, 2)*13474.5) - 2730.5;
else if (n == 14)
return StrictMath.pow(x, 14) - (7*StrictMath.pow(x, 13)) +
(91*StrictMath.pow(x, 11)) -
(1001*StrictMath.pow(x, 9)) +
(7293*StrictMath.pow(x, 7)) -
(31031*StrictMath.pow(x, 5)) +
(62881*StrictMath.pow(x, 3)) - 38227*x;
else if (n == 15)
return StrictMath.pow(x, 15) - (StrictMath.pow(x, 14)*7.5) +
(StrictMath.pow(x, 12)*113.75) -
(StrictMath.pow(x, 10)*1501.5) +
(StrictMath.pow(x, 8)*13674.375) -
(StrictMath.pow(x, 6)*77577.5) +
(StrictMath.pow(x, 4)*235803.75) -
(StrictMath.pow(x, 2)*286702.5) + 58098.0625;
double K = 4*(factorial(n))/StrictMath.pow(StrictMath.PI, n+1);
double S = 0.0;
for (int k=0; k<100001; k++)
{
S +=
StrictMath.sin((2*k+1)*((StrictMath.PI*x)-.5*(StrictMath.PI*n)))/
StrictMath.pow(2*k+1, n+1);
}
return K*S;
}
/**
* ref: Spanier & Oldham (?)
* @param n
* @param z
* @return
*/
public static double Ep(int n, double z)
{
double s,f,g,j,x;
x = z;
s = f = 1;
f = g = 0;
while(x>1) {
x--;
g += 2*s*StrictMath.pow(x,n);
s *= -1;
}
do {
g += 2*s*StrictMath.pow(x,n);
s *= -1;
x++;
} while (x<0);
j = 1.5 + StrictMath.floor(30/n);
do {
f += StrictMath.sin((StrictMath.PI/2)*(4*j*x - n))/StrictMath.pow(j,n+1);
j--;
} while (j>0);
f *= (4*s*factorial(n))/StrictMath.pow(2*StrictMath.PI, n+1);
f += g;
return f;
}
/**
* Euler totient function
* ref:
* http://functions.wolfram.com/13.06.02.0001.01
* @param n
* @return number of integers not exceeding n and (m,n)=1
*/
public static int EulerPhi(int n)
{
int s=0;
for (int k=1; k<=n; k++)
{
s += kdelta(gcd(n,k), 1);
}
return s;
}
/**
* Lambert W(z) funtion - implemented using Lagrange Inversion Theorem
* for |z| < 1/e
* @param z
* @return
*/
public static double LambertW1e(double z)
{
double S = 0.0;
for (int k=1; k <= INFINITY; k++)
{
S +=
(StrictMath.pow(-k, k-1) * StrictMath.pow(z,k))
/ factorial(k);
}
return S;
}
/**
* Lambert W(z) function - Series approximation
* ref: implemented from Python code found somewhere in the web
* @param z
* @return
*/
public static double LambertW(double z)
{
double S = 0.0;
for (int n=1; n <= 100; n++)
{
double Se = S * StrictMath.pow(StrictMath.E, S);
double S1e = (S+1) *
StrictMath.pow(StrictMath.E, S);
if (PRECISION > StrictMath.abs((z-Se)/S1e))
{
return S;
}
S -=
(Se-z) / (S1e - (S+2) * (Se-z) / (2*S+2));
}
return S;
}
/**
* return the generalized nth Laguerre polynomial
* ref: Spanier & Oldham
* @param n
* @param m // zero will return regular Laguerre polynomial
* @param x
* @return
*/
public static double Lp(int n, double m, double x)
{
double h, f, j;
h = f = j = 1;
if (n == 0)
return f;
f = 1 + m - x;
if (n == 1)
return f;
do {
j++;
double g = f;
f = ((2*j+m - 1 - x)*g - (j+m - 1)*h)/j;
h = g;
} while (j<n);
return f;
}
/**
* return the nth Laguerre polynomial
*
* @param n
* @param x
* @return
*/
public static double Lp(int n, double x)
{
return Lp(n, 0, x);
}
/**
* return the nth Pochhammer symbol (rising factorial)
* @param n
* @param x
* @return
*/
public static double P(int n, double x)
{
return Gamma(n+x)/Gamma(x);
}
/**
* falling factorial
* @param n
* @param x
* @return
*/
public static double Pf(int n, int x)
{
return factorial(x)/factorial(x-n);
}
/**
* Dirichlet eta fuction (aka Zeta alternating series)
* ref: Weisstein, Eric W. "Dirichlet Eta Function."
* From MathWorld--A Wolfram Web Resource.
* http://mathworld.wolfram.com/DirichletEtaFunction.html
* @param s
* @return
*/
public static double eta(double s)
{
// return precomputed values
if (s == 0)
return .5;
else if (s == 1)
return logtwo;
else if (s == 2)
return pi2on12;
else if (s > 125)
// any value > 125 converges to 1
return 1.0;
double result = 0.0;
for (int k=1; k<INFINITY; k++)
{
result += StrictMath.pow(-1, k-1)/StrictMath.pow(k, s);
}
return result;
}
/**
* Chebyshev polynomial of the 1st kind
* ref: http://functions.wolfram.com/05.04.02.0001.01
* @param n
* @param z
* @return
*/
public static double Tn(int n, double z)
{
if (n == 0)
return 1;
else if (n == 1)
return z;
if (z == 0)
if (even(n) == 1)
return StrictMath.pow(-1, n);
else
return 0.0;
double K = kdelta(n, 0)/2. + n/2.;
double S = 0.0;
double n2 = StrictMath.floor(n/2.);
for (int k=1; k<=n2; k++)
{
S += ((StrictMath.pow(-1, k)*factorial(n-k-1)*StrictMath.pow(2*z, n-2*k))/
factorial(k)*factorial(n-2*k)) +
StrictMath.pow(2, n-1)*StrictMath.pow(z, n);
}
return K*S;
}
/**
* Chebyshev polynomial of the 2nd kind
* ref: http://functions.wolfram.com/05.05.02.0001.01
* @param n
* @param z
* @return
*/
public static double Un(int n, double z)
{
if (n == 0)
return 1;
else if (n == 1)
return z*2;
if (z == 0)
if (even(n) == 1)
return StrictMath.pow(-1, n);
else
return 0.0;
double S = 0.0;
double n2 = StrictMath.floor(n/2.);
for (int k=1; k<=n2; k++)
{
S += ((StrictMath.pow(-1, k)*factorial(n-k-1)*StrictMath.pow(2*z, n-2*k))/
factorial(k)*factorial(n-2*k));
}
return S;
}
/**
* Chebyshev polynomial of the 1st kind
* ref: Spanier & Oldham (??)
* @param n
* @param x
* @return
*/
public static double ChebyshevT(int n, double x)
{
int j = 0;
double f,g,h;
f = g = x; /* 2x fo Un(x) */
if (n == 1)
return f;
f = h = j = 1;
if (n == 0)
return f;
do {
j++;
f = 2*x*g - h;
if (j == n)
break;
h = g;
g = f;
} while (1==1);
return f;
}
/**
* Chebyshev polynomial of the 2nd kind
* ref: Spanier & Oldham (??)
* @param n
* @param x
* @return
*/
public static double ChebyshevU(int n, double x)
{
int j = 0;
double f,g,h;
f = g = 2*x; /* 2x fo Un(x) */
if (n == 1)
return f;
f = h = j = 1;
if (n == 0)
return f;
do {
j++;
f = 2*x*g - h;
if (j == n)
break;
h = g;
g = f;
} while (1==1);
return f;
}
/**
* @param n
* @return
*/
public static double StieltjesGp(int n)
{
// lim m->infinity
int m = 101;
double sum = 0.0;
for (int k=1; k<=m; k++)
{
sum += (StrictMath.pow(-1, k)/k) *
functions.BernoulliP(
n+1,(StrictMath.log(k)/StrictMath.log(2)));
}
return (StrictMath.pow(StrictMath.log(2),n)/n+1) * sum;
}
/**
* @param n
* @return
*/
public static double StieltjesG(int n)
{
// lim m->infinity
int m = 101;
double sum = 0.0;
double t2 = (StrictMath.pow(StrictMath.log(m),n+1)/n+1);
for (int k=1; k<=m; k++)
{
sum += (StrictMath.pow(StrictMath.log(k), n)/k);
}
return (StrictMath.pow(-1,n)/factorial(n)) * (sum - t2);
}
/**
* diGamma Psi asymptotic approximation using Bernoulli numbers
* @param x
* @return
*/
public static double PolyGamma(double x)
{
double sum = 0.0;
// special values - for x=1, return -EM constant
if (x == 1.0)
return -1*constants.EM;
for (int n=1; n<10; n++)
{
sum += functions.BernoulliB(2*n)/(2*n*(StrictMath.pow(x, 2*n)));
}
return (StrictMath.log(x)) - (1.0/(2.0*x)) - sum;
}
/**
* diGamma Psi
* ref: Spanier & Oldham
* @param x
* @return psi(x)
*/
public static double PolyGammaP(double x)
{
double f = StrictMath.pow(10, 99);
double g = 0.0;
if (x == 0.0)
return f;
do
{
g += 1/x;
x++;
} while(x<5);
f = 1.0 + ((((0.46/StrictMath.pow(x, 2))-1)))/(10*StrictMath.pow(x, 2));
f = -((f/(6*x)+1)/(2*x)) + StrictMath.log(x) - g;
return f;
}
/**
* PolyGamma Psi
* ref: Spanier & Oldham
* @param n
* @param x
* @return
*/
public static double PolyGamma(int n, double x)
{
double f = StrictMath.pow(10, 99);
double g = 0.0;
double h = 0.0;
int j = 0;
if (x == 0.0)
return f;
do {
h = -1/x;
j = n;
do {
h = -(h*j)/x;
j--;
} while (j != 0);
g += h;
x += 1;
} while (x<5);
f = (1 - ((n+4)*(n+5))/(45.0*StrictMath.pow(x, 2)))/(60.0*StrictMath.pow(x, 2));
f = ((n+1)*(1-(f*(n+2)*(n+3))))/(6*x);
f = -((1/n)+((f+1)/(2*x)));
j = n;
do {
f = (-f*j)/x;
j--;
} while(j != 0);
f = f+g;
return f;
}
/**
* PolyGamma Psi
* ref: http://functions.wolfram.com/06.15.02.0002.02
* @param n (N+)
* @param z
* @return
*/
public static double PolyGamma2(int n, double z)
{
double t1 = StrictMath.pow(-1, n+1);
double t2 = factorial(n);
double sum = 0.0;
//TODO
for (int k=0; k<INFINITY; k++)
{
sum += 1/StrictMath.pow(k+z,n+1);
}
return t1*t2*sum;
}
/**
* simple algorithm for generating an arbitrary polynomial of degree n
* that does not vanish at -1
* ref: "An Efficient Algorithm for the Riemann Zeta Function", P. Borwein
* @param n
* @param x
* @return
*/
public static double Pn(int n, double x) {
return StrictMath.pow(x, n) * StrictMath.pow(1-x, n);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//double x = Double.parseDouble(args[0]);
int n = 1;
try {
n = Integer.parseInt(args[0]);
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
}
for (int i=1; i<=n; i++) {
System.out.println(
"moebiusmu for " + i + "=" + functions.moebiusmu(i));
}
// for (int i=0; i<100; i++) {
// int n;
// try {
// n = i;
// } catch (NumberFormatException e) {
// break;
// }
// System.out.println(
// "exp(lambda(n)) for " + i + "="
// + StrictMath.round(StrictMath.exp(functions.mangoldtLambda(n))));
// }
// for (int i=0; i<100; i++) {
// int n = i;
//
// System.out.println(
// "psi for " + i + "=" + functions.psi(n));
// }
//System.out.println("e^pi: " + StrictMath.pow(StrictMath.E, StrictMath.PI));
// test lambda for the first 95 values
// for (int i=0; i<96; i++) {
// System.out.println("lambda(" + i + "): " + mangoldtLambda(i));
// }
// test psi for first 10 values
//for (int i=0; i<10; i++) {
// System.out.println("psi(" + i + "): " + psi(i));
//}
// test mobius mu for the first 20 values
// for (int i=0; i<40; i++) {
// System.out.println("mobiusmu(" + i + "): " + moebiusmu(i));
// }
// test mertens M for some large n
//int n = Integer.parseInt(args[0]);
// for (int n=0; n<82; n++) {
// System.out.println("M(" + n + "):" + M(n));
// }
// int n = c
// System.out.println("factorial(" + n + "): " + factorial(n));
//
// int N = Integer.parseInt(args[0]);
// double s = Double.parseDouble(args[1]);
// System.out.println("PI(" + s + "," + N + "): " + PI(s,N));
/*
int n = 50;
for (int i=0; i<=n; i++)
{
if (even(i) == 1)
{
System.out.print("BernoulliB(" + i + "):" + BernoulliB(i));
System.out.print("\n");
}
}
*/
//double x = Double.parseDouble(args[1]);
//System.out.print("BernoulliP(" + n + ", " + x + "):" + BernoulliP(n, x));
// test Lambert W function
// double z = Double.parseDouble(args[0]);
// System.out.println("LambertW(" + z + "): " + LambertW(z));
// try a gram point approximation using the Lambert W function
// double gn = 2*StrictMath.PI*StrictMath.exp(1+LambertW((8*z+1)/8*StrictMath.E));
// System.out.println("gram point ~~ " + gn);
// test beta function
//System.out.println("beta(2,4): " + beta(2.,4.));
// test erf,erfc
//System.out.println("erf(.15): " + erf(.15));
//System.out.println("erfc(.15): " + erfc(.15));
//System.out.println("erf+erfc(.15): " + (erf(.15)+erfc(.15)));
// test gamma
/*
System.out.println("Gamma(.5): " + Gamma(.5));
System.out.println("Gamma(0.6): " + Gamma(0.6));
System.out.println("Gamma(7.4): " + Gamma(7.4));
System.out.println("Gamma(-4.2): " + Gamma(-4.2));
*/
// test inc gamma
/*
System.out.println("incGamma(.5,4.84): " + incGamma(.5,4.84));
System.out.println("incGamma(.5,4.84,0): " + incGamma(.5,4.84,0));
System.out.println("p_gamma(.5,4.84): " + p_gamma(.5,4.84,0));
System.out.println("q_gamma(.5,4.84): " + q_gamma(.5,4.84,0));
System.out.println("incGamma2(.5,-0.49): " + incGamma2(.5,-0.49));
System.out.println("incGamma2(-3.9,0): " + incGamma2(-3.9,0));
System.out.println("incGamma2(1,Pi): " + incGamma2(1,StrictMath.PI));
*/
// test inc gamma
//System.out.println("incGamma(.5,4.84,Gamma(.5)): " + incGamma(.5,4.84,Gamma(.5)));
// test reg inc gamma
//System.out.println("regIncGamma(.5,0,1): " + regIncGamma(.5,0,1));
// test first n laguerre polynomials
//double x = Double.parseDouble(args[0]);
//for (int i=0; i<11; i++) {
// int n = i;
/*
System.out.println(
"L" + 0 + "(" + 2 + ")=" + functions.Lp(0,2));
System.out.println(
"L" + 1 + "(" + 9 + ")=" + functions.Lp(1,9));
System.out.println(
"L" + 6 + "(" + 8.5 + ")=" + functions.Lp(6,8.5));
System.out.println(
"L" + 3 + "(2)(" + 1 + ")=" + functions.Lp(3,2,1));
*/
//}
// test pochhammer
//System.out.println("P" + 1 + "(" + .5 + ")=" + functions.P(1,.5));
// test eta function 0-42
/*
for (double s = 0; s<43; s++)
{
System.out.println("eta("+ s + "): " + eta(s));
}
*/
// test Euler number & polynomials
//double x = 0.25;
//for (n = 1; n<16; n++)
//{
//System.out.print("\nEulerE(" + n + "):" + EulerE(n));
// System.out.print("\nEulerP(" + n + ", " + x + "):" + EulerP(n, x));
// System.out.print("\n(-1)^" + n + " * EulerP(" + n + "," + (1-x) + "):" +
// StrictMath.pow(-1,n)*EulerP(n, 1-x));
//}
// more Euler polynomial tests - Spanier & Oldham
/*
System.out.print("\nEulerP(" + 6 + ", " + 0.4 + "):" + EulerP(6, 0.4));
System.out.print("\nEulerP(" + 13 + ", " + 1 + "):" + EulerP(13, 1.));
System.out.print("\nEulerP(" + 8 + ", " + -1.5 + "):" + EulerP(8, -1.5));
System.out.print("\nEulerP(" + 9 + ", " + 3.14159 + "...):" + EulerP(9, StrictMath.PI));
*/
// test Chebyshev polynomials
/*
double z = .2;
for (int n = 0; n<13; n++)
{
//System.out.print("\nTn(" + n + ", " + z + "):" + Tn(n, z));
System.out.print("\nChebyshevT(" + n + ", " + z + "):" + ChebyshevT(n, z));
//System.out.print("\nUn(" + n + ", " + z + "):" + Un(n, z));
System.out.print("\nChebyshevU(" + n + ", " + z + "):" + ChebyshevU(n, z));
}
System.out.print("\nChebyshevU(" + 5 + ", " + 0.5 + "):" + ChebyshevU(5, 0.5));
System.out.print("\nChebyshevU(" + 11 + ", " + -0.6 + "):" + ChebyshevU(11, -0.6));
*/
// test Stieltjes constants 0-43
/*
for (int n = 0; n<10; n++)
{
System.out.print("\nStieltjesG("+ n + "): " + StieltjesG(n));
}
*/
// test binomial
//System.out.println("\n(n k): 5,3: " + Binomial(5,3));
// test PI
//System.out.println("5!: " + factorial(5));
//System.out.println("PI(5):" + PI(5,100));
//System.out.println("PI(5.):" + PI(5.));
//System.out.println("0!=" + factorial(0));
// test bigOmega
//System.out.println("factors of 2008:" + bigOmega(2008));
// test Liouville function 1-40
/*
for (long l = 1; l<41; l++)
{
System.out.println("LLambda(" + l + "): " + LiouvilleLambda(l));
}
// test L(n) function 1-80
for (int l = 1; l<81; l++)
{
System.out.println("L(" + l + "): " + L(l));
}
*/
// test polygamma
/*
for (double x = 1; x<10; x++)
{
System.out.println("PolyGamma(" + x + "): " + PolyGamma(x));
}
System.out.println("PolyGamma(" + .5 + "): " + PolyGamma(.5));
for (int x = 1; x<10; x++)
{
System.out.println("PolyGammaP(" + x + "): " + PolyGammaP(x));
}
System.out.println("PolyGammaP(" + .5 + "): " + PolyGammaP(.5));
System.out.println("PolyGammaP(" + -1.05 + "): " + PolyGammaP(-1.05));
System.out.println("PolyGammaP(" + 1.461632145 + "): " + PolyGammaP(1.461632145));
// test PolyGamma with derivatives
System.out.println("PolyGamma(1,1): " + PolyGamma(1,1));
System.out.println("PolyGamma(1,5.5): " + PolyGamma(1,5.5));
System.out.println("PolyGamma(2,-0.5): " + PolyGamma(2,-0.5));
System.out.println("PolyGamma(2,5): " + PolyGamma(2,5));
System.out.println("PolyGamma(3,9): " + PolyGamma(3,9));
System.out.println("PolyGamma2(1,1): " + PolyGamma2(1,1));
System.out.println("PolyGamma2(1,5.5): " + PolyGamma2(1,5.5));
System.out.println("PolyGamma2(2,-0.5): " + PolyGamma2(2,-0.5));
System.out.println("PolyGamma2(2,5): " + PolyGamma2(2,5));
System.out.println("PolyGamma2(3,9): " + PolyGamma2(3,9));
*/
// test stirling
// for (int n=0; n <= 9; n++)
// {
// for (int k=0; k <= 9; k++)
// {
// System.out.println("Stirling(" + n + "," + k +") : " + Stirling1K(n,k));
// }
// }
}
}
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997, 1009, 1013, 1019, 1021, 1031, 1033, 1039, 1049, 1051, 1061, 1063, 1069, 1087, 1091, 1093, 1097, 1103, 1109, 1117, 1123, 1129, 1151, 1153, 1163, 1171, 1181, 1187, 1193, 1201, 1213, 1217, 1223, 1229, 1231, 1237, 1249, 1259, 1277, 1279, 1283, 1289, 1291, 1297, 1301, 1303, 1307, 1319, 1321, 1327, 1361, 1367, 1373, 1381, 1399, 1409, 1423, 1427, 1429, 1433, 1439, 1447, 1451, 1453, 1459, 1471, 1481, 1483, 1487, 1489, 1493, 1499, 1511, 1523, 1531, 1543, 1549, 1553, 1559, 1567, 1571, 1579, 1583, 1597, 1601, 1607, 1609, 1613, 1619, 1621, 1627, 1637, 1657, 1663, 1667, 1669, 1693, 1697, 1699, 1709, 1721, 1723, 1733, 1741, 1747, 1753, 1759, 1777, 1783, 1787, 1789, 1801, 1811, 1823, 1831, 1847, 1861, 1867, 1871, 1873, 1877, 1879, 1889, 1901, 1907, 1913, 1931, 1933, 1949, 1951, 1973, 1979, 1987, 1993, 1997, 1999, 2003, 2011, 2017, 2027, 2029, 2039, 2053, 2063, 2069, 2081, 2083, 2087, 2089, 2099, 2111, 2113, 2129, 2131, 2137, 2141, 2143, 2153, 2161, 2179, 2203, 2207, 2213, 2221, 2237, 2239, 2243, 2251, 2267, 2269, 2273, 2281, 2287, 2293, 2297, 2309, 2311, 2333, 2339, 2341, 2347, 2351, 2357, 2371, 2377, 2381, 2383, 2389, 2393, 2399, 2411, 2417, 2423, 2437, 2441, 2447, 2459, 2467, 2473, 2477, 2503, 2521, 2531, 2539, 2543, 2549, 2551, 2557, 2579, 2591, 2593, 2609, 2617, 2621, 2633, 2647, 2657, 2659, 2663, 2671, 2677, 2683, 2687, 2689, 2693, 2699, 2707, 2711, 2713, 2719, 2729, 2731, 2741, 2749, 2753, 2767, 2777, 2789, 2791, 2797, 2801, 2803, 2819, 2833, 2837, 2843, 2851, 2857, 2861, 2879, 2887, 2897, 2903, 2909, 2917, 2927, 2939, 2953, 2957, 2963, 2969, 2971, 2999, 3001, 3011, 3019, 3023, 3037, 3041, 3049, 3061, 3067, 3079, 3083, 3089, 3109, 3119, 3121, 3137, 3163, 3167, 3169, 3181, 3187, 3191, 3203, 3209, 3217, 3221, 3229, 3251, 3253, 3257, 3259, 3271, 3299, 3301, 3307, 3313, 3319, 3323, 3329, 3331, 3343, 3347, 3359, 3361, 3371, 3373, 3389, 3391, 3407, 3413, 3433, 3449, 3457, 3461, 3463, 3467, 3469, 3491, 3499, 3511, 3517, 3527, 3529, 3533, 3539, 3541, 3547, 3557, 3559, 3571, 3581, 3583, 3593, 3607, 3613, 3617, 3623, 3631, 3637, 3643, 3659, 3671, 3673, 3677, 3691, 3697, 3701, 3709, 3719, 3727, 3733, 3739, 3761, 3767, 3769, 3779, 3793, 3797, 3803, 3821, 3823, 3833, 3847, 3851, 3853, 3863, 3877, 3881, 3889, 3907, 3911, 3917, 3919, 3923, 3929, 3931, 3943, 3947, 3967, 3989, 4001, 4003, 4007, 4013, 4019, 4021, 4027, 4049, 4051, 4057, 4073, 4079, 4091, 4093, 4099, 4111, 4127, 4129, 4133, 4139, 4153, 4157, 4159, 4177, 4201, 4211, 4217, 4219, 4229, 4231, 4241, 4243, 4253, 4259, 4261, 4271, 4273, 4283, 4289, 4297, 4327, 4337, 4339, 4349, 4357, 4363, 4373, 4391, 4397, 4409, 4421, 4423, 4441, 4447, 4451, 4457, 4463, 4481, 4483, 4493, 4507, 4513, 4517, 4519, 4523, 4547, 4549, 4561, 4567, 4583, 4591, 4597, 4603, 4621, 4637, 4639, 4643, 4649, 4651, 4657, 4663, 4673, 4679, 4691, 4703, 4721, 4723, 4729, 4733, 4751, 4759, 4783, 4787, 4789, 4793, 4799, 4801, 4813, 4817, 4831, 4861, 4871, 4877, 4889, 4903, 4909, 4919, 4931, 4933, 4937, 4943, 4951, 4957, 4967, 4969, 4973, 4987, 4993, 4999, 5003, 5009, 5011, 5021, 5023, 5039, 5051, 5059, 5077, 5081, 5087, 5099, 5101, 5107, 5113, 5119, 5147, 5153, 5167, 5171, 5179, 5189, 5197, 5209, 5227, 5231, 5233, 5237, 5261, 5273, 5279, 5281, 5297, 5303, 5309, 5323, 5333, 5347, 5351, 5381, 5387, 5393, 5399, 5407, 5413, 5417, 5419, 5431, 5437, 5441, 5443, 5449, 5471, 5477, 5479, 5483, 5501, 5503, 5507, 5519, 5521, 5527, 5531, 5557, 5563, 5569, 5573, 5581, 5591, 5623, 5639, 5641, 5647, 5651, 5653, 5657, 5659, 5669, 5683, 5689, 5693, 5701, 5711, 5717, 5737, 5741, 5743, 5749, 5779, 5783, 5791, 5801, 5807, 5813, 5821, 5827, 5839, 5843, 5849, 5851, 5857, 5861, 5867, 5869, 5879, 5881, 5897, 5903, 5923, 5927, 5939, 5953, 5981, 5987, 6007, 6011, 6029, 6037, 6043, 6047, 6053, 6067, 6073, 6079, 6089, 6091, 6101, 6113, 6121, 6131, 6133, 6143, 6151, 6163, 6173, 6197, 6199, 6203, 6211, 6217, 6221, 6229, 6247, 6257, 6263, 6269, 6271, 6277, 6287, 6299, 6301, 6311, 6317, 6323, 6329, 6337, 6343, 6353, 6359, 6361, 6367, 6373, 6379, 6389, 6397, 6421, 6427, 6449, 6451, 6469, 6473, 6481, 6491, 6521, 6529, 6547, 6551, 6553, 6563, 6569, 6571, 6577, 6581, 6599, 6607, 6619, 6637, 6653, 6659, 6661, 6673, 6679, 6689, 6691, 6701, 6703, 6709, 6719, 6733, 6737, 6761, 6763, 6779, 6781, 6791, 6793, 6803, 6823, 6827, 6829, 6833, 6841, 6857, 6863, 6869, 6871, 6883, 6899, 6907, 6911, 6917, 6947, 6949, 6959, 6961, 6967, 6971, 6977, 6983, 6991, 6997, 7001, 7013, 7019, 7027, 7039, 7043, 7057, 7069, 7079, 7103, 7109, 7121, 7127, 7129, 7151, 7159, 7177, 7187, 7193, 7207, 7211, 7213, 7219, 7229, 7237, 7243, 7247, 7253, 7283, 7297, 7307, 7309, 7321, 7331, 7333, 7349, 7351, 7369, 7393, 7411, 7417, 7433, 7451, 7457, 7459, 7477, 7481, 7487, 7489, 7499, 7507, 7517, 7523, 7529, 7537, 7541, 7547, 7549, 7559, 7561, 7573, 7577, 7583, 7589, 7591, 7603, 7607, 7621, 7639, 7643, 7649, 7669, 7673, 7681, 7687, 7691, 7699, 7703, 7717, 7723, 7727, 7741, 7753, 7757, 7759, 7789, 7793, 7817, 7823, 7829, 7841, 7853, 7867, 7873, 7877, 7879, 7883, 7901, 7907, 7919, 7927, 7933, 7937, 7949, 7951, 7963, 7993, 8009, 8011, 8017, 8039, 8053, 8059, 8069, 8081, 8087, 8089, 8093, 8101, 8111, 8117, 8123, 8147, 8161, 8167, 8171, 8179, 8191, 8209, 8219, 8221, 8231, 8233, 8237, 8243, 8263, 8269, 8273, 8287, 8291, 8293, 8297, 8311, 8317, 8329, 8353, 8363, 8369, 8377, 8387, 8389, 8419, 8423, 8429, 8431, 8443, 8447, 8461, 8467, 8501, 8513, 8521, 8527, 8537, 8539, 8543, 8563, 8573, 8581, 8597, 8599, 8609, 8623, 8627, 8629, 8641, 8647, 8663, 8669, 8677, 8681, 8689, 8693, 8699, 8707, 8713, 8719, 8731, 8737, 8741, 8747, 8753, 8761, 8779, 8783, 8803, 8807, 8819, 8821, 8831, 8837, 8839, 8849, 8861, 8863, 8867, 8887, 8893, 8923, 8929, 8933, 8941, 8951, 8963, 8969, 8971, 8999, 9001, 9007, 9011, 9013, 9029, 9041, 9043, 9049, 9059, 9067, 9091, 9103, 9109, 9127, 9133, 9137, 9151, 9157, 9161, 9173, 9181, 9187, 9199, 9203, 9209, 9221, 9227, 9239, 9241, 9257, 9277, 9281, 9283, 9293, 9311, 9319, 9323, 9337, 9341, 9343, 9349, 9371, 9377, 9391, 9397, 9403, 9413, 9419, 9421, 9431, 9433, 9437, 9439, 9461, 9463, 9467, 9473, 9479, 9491, 9497, 9511, 9521, 9533, 9539, 9547, 9551, 9587, 9601, 9613, 9619, 9623, 9629, 9631, 9643, 9649, 9661, 9677, 9679, 9689, 9697, 9719, 9721, 9733, 9739, 9743, 9749, 9767, 9769, 9781, 9787, 9791, 9803, 9811, 9817, 9829, 9833, 9839, 9851, 9857, 9859, 9871, 9883, 9887, 9901, 9907, 9923, 9929, 9931, 9941, 9949, 9967, 9973, 10007, 10009, 10037, 10039, 10061, 10067, 10069, 10079, 10091, 10093, 10099, 10103, 10111, 10133, 10139, 10141, 10151, 10159, 10163, 10169, 10177, 10181, 10193, 10211, 10223, 10243, 10247, 10253, 10259, 10267, 10271, 10273, 10289, 10301, 10303, 10313, 10321, 10331, 10333, 10337, 10343, 10357, 10369, 10391, 10399, 10427, 10429, 10433, 10453, 10457, 10459, 10463, 10477, 10487, 10499, 10501, 10513, 10529, 10531, 10559, 10567, 10589, 10597, 10601, 10607, 10613, 10627, 10631, 10639, 10651, 10657, 10663, 10667, 10687, 10691, 10709, 10711, 10723, 10729, 10733, 10739, 10753, 10771, 10781, 10789, 10799, 10831, 10837, 10847, 10853, 10859, 10861, 10867, 10883, 10889, 10891, 10903, 10909, 10937, 10939, 10949, 10957, 10973, 10979, 10987, 10993, 11003, 11027, 11047, 11057, 11059, 11069, 11071, 11083, 11087, 11093, 11113, 11117, 11119, 11131, 11149, 11159, 11161, 11171, 11173, 11177, 11197, 11213, 11239, 11243, 11251, 11257, 11261, 11273, 11279, 11287, 11299, 11311, 11317, 11321, 11329, 11351, 11353, 11369, 11383, 11393, 11399, 11411, 11423, 11437, 11443, 11447, 11467, 11471, 11483, 11489, 11491, 11497, 11503, 11519, 11527, 11549, 11551, 11579, 11587, 11593, 11597, 11617, 11621, 11633, 11657, 11677, 11681, 11689, 11699, 11701, 11717, 11719, 11731, 11743, 11777, 11779, 11783, 11789, 11801, 11807, 11813, 11821, 11827, 11831, 11833, 11839, 11863, 11867, 11887, 11897, 11903, 11909, 11923, 11927, 11933, 11939, 11941, 11953, 11959, 11969, 11971, 11981, 11987, 12007, 12011, 12037, 12041, 12043, 12049, 12071, 12073, 12097, 12101, 12107, 12109, 12113, 12119, 12143, 12149, 12157, 12161, 12163, 12197, 12203, 12211, 12227, 12239, 12241, 12251, 12253, 12263, 12269, 12277, 12281, 12289, 12301, 12323, 12329, 12343, 12347, 12373, 12377, 12379, 12391, 12401, 12409, 12413, 12421, 12433, 12437, 12451, 12457, 12473, 12479, 12487, 12491, 12497, 12503, 12511, 12517, 12527, 12539, 12541, 12547, 12553, 12569, 12577, 12583, 12589, 12601, 12611, 12613, 12619, 12637, 12641, 12647, 12653, 12659, 12671, 12689, 12697, 12703, 12713, 12721, 12739, 12743, 12757, 12763, 12781, 12791, 12799, 12809, 12821, 12823, 12829, 12841, 12853, 12889, 12893, 12899, 12907, 12911, 12917, 12919, 12923, 12941, 12953, 12959, 12967, 12973, 12979, 12983, 13001, 13003, 13007, 13009, 13033, 13037, 13043, 13049, 13063, 13093, 13099, 13103, 13109, 13121, 13127, 13147, 13151, 13159, 13163, 13171, 13177, 13183, 13187, 13217, 13219, 13229, 13241, 13249, 13259, 13267, 13291, 13297, 13309, 13313, 13327, 13331, 13337, 13339, 13367, 13381, 13397, 13399, 13411, 13417, 13421, 13441, 13451, 13457, 13463, 13469, 13477, 13487, 13499, 13513, 13523, 13537, 13553, 13567, 13577, 13591, 13597, 13613, 13619, 13627, 13633, 13649, 13669, 13679, 13681, 13687, 13691, 13693, 13697, 13709, 13711, 13721, 13723, 13729, 13751, 13757, 13759, 13763, 13781, 13789, 13799, 13807, 13829, 13831, 13841, 13859, 13873, 13877, 13879, 13883, 13901, 13903, 13907, 13913, 13921, 13931, 13933, 13963, 13967, 13997, 13999, 14009, 14011, 14029, 14033, 14051, 14057, 14071, 14081, 14083, 14087, 14107, 14143, 14149, 14153, 14159, 14173, 14177, 14197, 14207, 14221, 14243, 14249, 14251, 14281, 14293, 14303, 14321, 14323, 14327, 14341, 14347, 14369, 14387, 14389, 14401, 14407, 14411, 14419, 14423, 14431, 14437, 14447, 14449, 14461, 14479, 14489, 14503, 14519, 14533, 14537, 14543, 14549, 14551, 14557, 14561, 14563, 14591, 14593, 14621, 14627, 14629, 14633, 14639, 14653, 14657, 14669, 14683, 14699, 14713, 14717, 14723, 14731, 14737, 14741, 14747, 14753, 14759, 14767, 14771, 14779, 14783, 14797, 14813, 14821, 14827, 14831, 14843, 14851, 14867, 14869, 14879, 14887, 14891, 14897, 14923, 14929, 14939, 14947, 14951, 14957, 14969, 14983, 15013, 15017, 15031, 15053, 15061, 15073, 15077, 15083, 15091, 15101, 15107, 15121, 15131, 15137, 15139, 15149, 15161, 15173, 15187, 15193, 15199, 15217, 15227, 15233, 15241, 15259, 15263, 15269, 15271, 15277, 15287, 15289, 15299, 15307, 15313, 15319, 15329, 15331, 15349, 15359, 15361, 15373, 15377, 15383, 15391, 15401, 15413, 15427, 15439, 15443, 15451, 15461, 15467, 15473, 15493, 15497, 15511, 15527, 15541, 15551, 15559, 15569, 15581, 15583, 15601, 15607, 15619, 15629, 15641, 15643, 15647, 15649, 15661, 15667, 15671, 15679, 15683, 15727, 15731, 15733, 15737, 15739, 15749, 15761, 15767, 15773, 15787, 15791, 15797, 15803, 15809, 15817, 15823, 15859, 15877, 15881, 15887, 15889, 15901, 15907, 15913, 15919, 15923, 15937, 15959, 15971, 15973, 15991, 16001, 16007, 16033, 16057, 16061, 16063, 16067, 16069, 16073, 16087, 16091, 16097, 16103, 16111, 16127, 16139, 16141, 16183, 16187, 16189, 16193, 16217, 16223, 16229, 16231, 16249, 16253, 16267, 16273, 16301, 16319, 16333, 16339, 16349, 16361, 16363, 16369, 16381, 16411, 16417, 16421, 16427, 16433, 16447, 16451, 16453, 16477, 16481, 16487, 16493, 16519, 16529, 16547, 16553, 16561, 16567, 16573, 16603, 16607, 16619, 16631, 16633, 16649, 16651, 16657, 16661, 16673, 16691, 16693, 16699, 16703, 16729, 16741, 16747, 16759, 16763, 16787, 16811, 16823, 16829, 16831, 16843, 16871, 16879, 16883, 16889, 16901, 16903, 16921, 16927, 16931, 16937, 16943, 16963, 16979, 16981, 16987, 16993, 17011, 17021, 17027, 17029, 17033, 17041, 17047, 17053, 17077, 17093, 17099, 17107, 17117, 17123, 17137, 17159, 17167, 17183, 17189, 17191, 17203, 17207, 17209, 17231, 17239, 17257, 17291, 17293, 17299, 17317, 17321, 17327, 17333, 17341, 17351, 17359, 17377, 17383, 17387, 17389, 17393, 17401, 17417, 17419, 17431, 17443, 17449, 17467, 17471, 17477, 17483, 17489, 17491, 17497, 17509, 17519, 17539, 17551, 17569, 17573, 17579, 17581, 17597, 17599, 17609, 17623, 17627, 17657, 17659, 17669, 17681, 17683, 17707, 17713, 17729, 17737, 17747, 17749, 17761, 17783, 17789, 17791, 17807, 17827, 17837, 17839, 17851, 17863, 17881, 17891, 17903, 17909, 17911, 17921, 17923, 17929, 17939, 17957, 17959, 17971, 17977, 17981, 17987, 17989, 18013, 18041, 18043, 18047, 18049, 18059, 18061, 18077, 18089, 18097, 18119, 18121, 18127, 18131, 18133, 18143, 18149, 18169, 18181, 18191, 18199, 18211, 18217, 18223, 18229, 18233, 18251, 18253, 18257, 18269, 18287, 18289, 18301, 18307, 18311, 18313, 18329, 18341, 18353, 18367, 18371, 18379, 18397, 18401, 18413, 18427, 18433, 18439, 18443, 18451, 18457, 18461, 18481, 18493, 18503, 18517, 18521, 18523, 18539, 18541, 18553, 18583, 18587, 18593, 18617, 18637, 18661, 18671, 18679, 18691, 18701, 18713, 18719, 18731, 18743, 18749, 18757, 18773, 18787, 18793, 18797, 18803, 18839, 18859, 18869, 18899, 18911, 18913, 18917, 18919, 18947, 18959, 18973, 18979, 19001, 19009, 19013, 19031, 19037, 19051, 19069, 19073, 19079, 19081, 19087, 19121, 19139, 19141, 19157, 19163, 19181, 19183, 19207, 19211, 19213, 19219, 19231, 19237, 19249, 19259, 19267, 19273, 19289, 19301, 19309, 19319, 19333, 19373, 19379, 19381, 19387, 19391, 19403, 19417, 19421, 19423, 19427, 19429, 19433, 19441, 19447, 19457, 19463, 19469, 19471, 19477, 19483, 19489, 19501, 19507, 19531, 19541, 19543, 19553, 19559, 19571, 19577, 19583, 19597, 19603, 19609, 19661, 19681, 19687, 19697, 19699, 19709, 19717, 19727, 19739, 19751, 19753, 19759, 19763, 19777, 19793, 19801, 19813, 19819, 19841, 19843, 19853, 19861, 19867, 19889, 19891, 19913, 19919, 19927, 19937, 19949, 19961, 19963, 19973, 19979, 19991, 19993, 19997, 20011, 20021, 20023, 20029, 20047, 20051, 20063, 20071, 20089, 20101, 20107, 20113, 20117, 20123, 20129, 20143, 20147, 20149, 20161, 20173, 20177, 20183, 20201, 20219, 20231, 20233, 20249, 20261, 20269, 20287, 20297, 20323, 20327, 20333, 20341, 20347, 20353, 20357, 20359, 20369, 20389, 20393, 20399, 20407, 20411, 20431, 20441, 20443, 20477, 20479, 20483, 20507, 20509, 20521, 20533, 20543, 20549, 20551, 20563, 20593, 20599, 20611, 20627, 20639, 20641, 20663, 20681, 20693, 20707, 20717, 20719, 20731, 20743, 20747, 20749, 20753, 20759, 20771, 20773, 20789, 20807, 20809, 20849, 20857, 20873, 20879, 20887, 20897, 20899, 20903, 20921, 20929, 20939, 20947, 20959, 20963, 20981, 20983, 21001, 21011, 21013, 21017, 21019, 21023, 21031, 21059, 21061, 21067, 21089, 21101, 21107, 21121, 21139, 21143, 21149, 21157, 21163, 21169, 21179, 21187, 21191, 21193, 21211, 21221, 21227, 21247, 21269, 21277, 21283, 21313, 21317, 21319, 21323, 21341, 21347, 21377, 21379, 21383, 21391, 21397, 21401, 21407, 21419, 21433, 21467, 21481, 21487, 21491, 21493, 21499, 21503, 21517, 21521, 21523, 21529, 21557, 21559, 21563, 21569, 21577, 21587, 21589, 21599, 21601, 21611, 21613, 21617, 21647, 21649, 21661, 21673, 21683, 21701, 21713, 21727, 21737, 21739, 21751, 21757, 21767, 21773, 21787, 21799, 21803, 21817, 21821, 21839, 21841, 21851, 21859, 21863, 21871, 21881, 21893, 21911, 21929, 21937, 21943, 21961, 21977, 21991, 21997, 22003, 22013, 22027, 22031, 22037, 22039, 22051, 22063, 22067, 22073, 22079, 22091, 22093, 22109, 22111, 22123, 22129, 22133, 22147, 22153, 22157, 22159, 22171, 22189, 22193, 22229, 22247, 22259, 22271, 22273, 22277, 22279, 22283, 22291, 22303, 22307, 22343, 22349, 22367, 22369, 22381, 22391, 22397, 22409, 22433, 22441, 22447, 22453, 22469, 22481, 22483, 22501, 22511, 22531, 22541, 22543, 22549, 22567, 22571, 22573, 22613, 22619, 22621, 22637, 22639, 22643, 22651, 22669, 22679, 22691, 22697, 22699, 22709, 22717, 22721, 22727, 22739, 22741, 22751, 22769, 22777, 22783, 22787, 22807, 22811, 22817, 22853, 22859, 22861, 22871, 22877, 22901, 22907, 22921, 22937, 22943, 22961, 22963, 22973, 22993, 23003, 23011, 23017, 23021, 23027, 23029, 23039, 23041, 23053, 23057, 23059, 23063, 23071, 23081, 23087, 23099, 23117, 23131, 23143, 23159, 23167, 23173, 23189, 23197, 23201, 23203, 23209, 23227, 23251, 23269, 23279, 23291, 23293, 23297, 23311, 23321, 23327, 23333, 23339, 23357, 23369, 23371, 23399, 23417, 23431, 23447, 23459, 23473, 23497, 23509, 23531, 23537, 23539, 23549, 23557, 23561, 23563, 23567, 23581, 23593, 23599, 23603, 23609, 23623, 23627, 23629, 23633, 23663, 23669, 23671, 23677, 23687, 23689, 23719, 23741, 23743, 23747, 23753, 23761, 23767, 23773, 23789, 23801, 23813, 23819, 23827, 23831, 23833, 23857, 23869, 23873, 23879, 23887, 23893, 23899, 23909, 23911, 23917, 23929, 23957, 23971, 23977, 23981, 23993, 24001, 24007, 24019, 24023, 24029, 24043, 24049, 24061, 24071, 24077, 24083, 24091, 24097, 24103, 24107, 24109, 24113, 24121, 24133, 24137, 24151, 24169, 24179, 24181, 24197, 24203, 24223, 24229, 24239, 24247, 24251, 24281, 24317, 24329, 24337, 24359, 24371, 24373, 24379, 24391, 24407, 24413, 24419, 24421, 24439, 24443, 24469, 24473, 24481, 24499, 24509, 24517, 24527, 24533, 24547, 24551, 24571, 24593, 24611, 24623, 24631, 24659, 24671, 24677, 24683, 24691, 24697, 24709, 24733, 24749, 24763, 24767, 24781, 24793, 24799, 24809, 24821, 24841, 24847, 24851, 24859, 24877, 24889, 24907, 24917, 24919, 24923, 24943, 24953, 24967, 24971, 24977, 24979, 24989, 25013, 25031, 25033, 25037, 25057, 25073, 25087, 25097, 25111, 25117, 25121, 25127, 25147, 25153, 25163, 25169, 25171, 25183, 25189, 25219, 25229, 25237, 25243, 25247, 25253, 25261, 25301, 25303, 25307, 25309, 25321, 25339, 25343, 25349, 25357, 25367, 25373, 25391, 25409, 25411, 25423, 25439, 25447, 25453, 25457, 25463, 25469, 25471, 25523, 25537, 25541, 25561, 25577, 25579, 25583, 25589, 25601, 25603, 25609, 25621, 25633, 25639, 25643, 25657, 25667, 25673, 25679, 25693, 25703, 25717, 25733, 25741, 25747, 25759, 25763, 25771, 25793, 25799, 25801, 25819, 25841, 25847, 25849, 25867, 25873, 25889, 25903, 25913, 25919, 25931, 25933, 25939, 25943, 25951, 25969, 25981, 25997, 25999, 26003, 26017, 26021, 26029, 26041, 26053, 26083, 26099, 26107, 26111, 26113, 26119, 26141, 26153, 26161, 26171, 26177, 26183, 26189, 26203, 26209, 26227, 26237, 26249, 26251, 26261, 26263, 26267, 26293, 26297, 26309, 26317, 26321, 26339, 26347, 26357, 26371, 26387, 26393, 26399, 26407, 26417, 26423, 26431, 26437, 26449, 26459, 26479, 26489, 26497, 26501, 26513, 26539, 26557, 26561, 26573, 26591, 26597, 26627, 26633, 26641, 26647, 26669, 26681, 26683, 26687, 26693, 26699, 26701, 26711, 26713, 26717, 26723, 26729, 26731, 26737, 26759, 26777, 26783, 26801, 26813, 26821, 26833, 26839, 26849, 26861, 26863, 26879, 26881, 26891, 26893, 26903, 26921, 26927, 26947, 26951, 26953, 26959, 26981, 26987, 26993, 27011, 27017, 27031, 27043, 27059, 27061, 27067, 27073, 27077, 27091, 27103, 27107, 27109, 27127, 27143, 27179, 27191, 27197, 27211, 27239, 27241, 27253, 27259, 27271, 27277, 27281, 27283, 27299, 27329, 27337, 27361, 27367, 27397, 27407, 27409, 27427, 27431, 27437, 27449, 27457, 27479, 27481, 27487, 27509, 27527, 27529, 27539, 27541, 27551, 27581, 27583, 27611, 27617, 27631, 27647, 27653, 27673, 27689, 27691, 27697, 27701, 27733, 27737, 27739, 27743, 27749, 27751, 27763, 27767, 27773, 27779, 27791, 27793, 27799, 27803, 27809, 27817, 27823, 27827, 27847, 27851, 27883, 27893, 27901, 27917, 27919, 27941, 27943, 27947, 27953, 27961, 27967, 27983, 27997, 28001, 28019, 28027, 28031, 28051, 28057, 28069, 28081, 28087, 28097, 28099, 28109, 28111, 28123, 28151, 28163, 28181, 28183, 28201, 28211, 28219, 28229, 28277, 28279, 28283, 28289, 28297, 28307, 28309, 28319, 28349, 28351, 28387, 28393, 28403, 28409, 28411, 28429, 28433, 28439, 28447, 28463, 28477, 28493, 28499, 28513, 28517, 28537, 28541, 28547, 28549, 28559, 28571, 28573, 28579, 28591, 28597, 28603, 28607, 28619, 28621, 28627, 28631, 28643, 28649, 28657, 28661, 28663, 28669, 28687, 28697, 28703, 28711, 28723, 28729, 28751, 28753, 28759, 28771, 28789, 28793, 28807, 28813, 28817, 28837, 28843, 28859, 28867, 28871, 28879, 28901, 28909, 28921, 28927, 28933, 28949, 28961, 28979, 29009, 29017, 29021, 29023, 29027, 29033, 29059, 29063, 29077, 29101, 29123, 29129, 29131, 29137, 29147, 29153, 29167, 29173, 29179, 29191, 29201, 29207, 29209, 29221, 29231, 29243, 29251, 29269, 29287, 29297, 29303, 29311, 29327, 29333, 29339, 29347, 29363, 29383, 29387, 29389, 29399, 29401, 29411, 29423, 29429, 29437, 29443, 29453, 29473, 29483, 29501, 29527, 29531, 29537, 29567, 29569, 29573, 29581, 29587, 29599, 29611, 29629, 29633, 29641, 29663, 29669, 29671, 29683, 29717, 29723, 29741, 29753, 29759, 29761, 29789, 29803, 29819, 29833, 29837, 29851, 29863, 29867, 29873, 29879, 29881, 29917, 29921, 29927, 29947, 29959, 29983, 29989, 30011, 30013, 30029, 30047, 30059, 30071, 30089, 30091, 30097, 30103, 30109, 30113, 30119, 30133, 30137, 30139, 30161, 30169, 30181, 30187, 30197, 30203, 30211, 30223, 30241, 30253, 30259, 30269, 30271, 30293, 30307, 30313, 30319, 30323, 30341, 30347, 30367, 30389, 30391, 30403, 30427, 30431, 30449, 30467, 30469, 30491, 30493, 30497, 30509, 30517, 30529, 30539, 30553, 30557, 30559, 30577, 30593, 30631, 30637, 30643, 30649, 30661, 30671, 30677, 30689, 30697, 30703, 30707, 30713, 30727, 30757, 30763, 30773, 30781, 30803, 30809, 30817, 30829, 30839, 30841, 30851, 30853, 30859, 30869, 30871, 30881, 30893, 30911, 30931, 30937, 30941, 30949, 30971, 30977, 30983, 31013, 31019, 31033, 31039, 31051, 31063, 31069, 31079, 31081, 31091, 31121, 31123, 31139, 31147, 31151, 31153, 31159, 31177, 31181, 31183, 31189, 31193, 31219, 31223, 31231, 31237, 31247, 31249, 31253, 31259, 31267, 31271, 31277, 31307, 31319, 31321, 31327, 31333, 31337, 31357, 31379, 31387, 31391, 31393, 31397, 31469, 31477, 31481, 31489, 31511, 31513, 31517, 31531, 31541, 31543, 31547, 31567, 31573, 31583, 31601, 31607, 31627, 31643, 31649, 31657, 31663, 31667, 31687, 31699, 31721, 31723, 31727, 31729, 31741, 31751, 31769, 31771, 31793, 31799, 31817, 31847, 31849, 31859, 31873, 31883, 31891, 31907, 31957, 31963, 31973, 31981, 31991, 32003, 32009, 32027, 32029, 32051, 32057, 32059, 32063, 32069, 32077, 32083, 32089, 32099, 32117, 32119, 32141, 32143, 32159, 32173, 32183, 32189, 32191, 32203, 32213, 32233, 32237, 32251, 32257, 32261, 32297, 32299, 32303, 32309, 32321, 32323, 32327, 32341, 32353, 32359, 32363, 32369, 32371, 32377, 32381, 32401, 32411, 32413, 32423, 32429, 32441, 32443, 32467, 32479, 32491, 32497, 32503, 32507, 32531, 32533, 32537, 32561, 32563, 32569, 32573, 32579, 32587, 32603, 32609, 32611, 32621, 32633, 32647, 32653, 32687, 32693, 32707, 32713, 32717, 32719, 32749, 32771, 32779, 32783, 32789, 32797, 32801, 32803, 32831, 32833, 32839, 32843, 32869, 32887, 32909, 32911, 32917, 32933, 32939, 32941, 32957, 32969, 32971, 32983, 32987, 32993, 32999, 33013, 33023, 33029, 33037, 33049, 33053, 33071, 33073, 33083, 33091, 33107, 33113, 33119, 33149, 33151, 33161, 33179, 33181, 33191, 33199, 33203, 33211, 33223, 33247, 33287, 33289, 33301, 33311, 33317, 33329, 33331, 33343, 33347, 33349, 33353, 33359, 33377, 33391, 33403, 33409, 33413, 33427, 33457, 33461, 33469, 33479, 33487, 33493, 33503, 33521, 33529, 33533, 33547, 33563, 33569, 33577, 33581, 33587, 33589, 33599, 33601, 33613, 33617, 33619, 33623, 33629, 33637, 33641, 33647, 33679, 33703, 33713, 33721, 33739, 33749, 33751, 33757, 33767, 33769, 33773, 33791, 33797, 33809, 33811, 33827, 33829, 33851, 33857, 33863, 33871, 33889, 33893, 33911, 33923, 33931, 33937, 33941, 33961, 33967, 33997, 34019, 34031, 34033, 34039, 34057, 34061, 34123, 34127, 34129, 34141, 34147, 34157, 34159, 34171, 34183, 34211, 34213, 34217, 34231, 34253, 34259, 34261, 34267, 34273, 34283, 34297, 34301, 34303, 34313, 34319, 34327, 34337, 34351, 34361, 34367, 34369, 34381, 34403, 34421, 34429, 34439, 34457, 34469, 34471, 34483, 34487, 34499, 34501, 34511, 34513, 34519, 34537, 34543, 34549, 34583, 34589, 34591, 34603, 34607, 34613, 34631, 34649, 34651, 34667, 34673, 34679, 34687, 34693, 34703, 34721, 34729, 34739, 34747, 34757, 34759, 34763, 34781, 34807, 34819, 34841, 34843, 34847, 34849, 34871, 34877, 34883, 34897, 34913, 34919, 34939, 34949, 34961, 34963, 34981, 35023, 35027, 35051, 35053, 35059, 35069, 35081, 35083, 35089, 35099, 35107, 35111, 35117, 35129, 35141, 35149, 35153, 35159, 35171, 35201, 35221, 35227, 35251, 35257, 35267, 35279, 35281, 35291, 35311, 35317, 35323, 35327, 35339, 35353, 35363, 35381, 35393, 35401, 35407, 35419, 35423, 35437, 35447, 35449, 35461, 35491, 35507, 35509, 35521, 35527, 35531, 35533, 35537, 35543, 35569, 35573, 35591, 35593, 35597, 35603, 35617, 35671, 35677, 35729, 35731, 35747, 35753, 35759, 35771, 35797, 35801, 35803, 35809, 35831, 35837, 35839, 35851, 35863, 35869, 35879, 35897, 35899, 35911, 35923, 35933, 35951, 35963, 35969, 35977, 35983, 35993, 35999, 36007, 36011, 36013, 36017, 36037, 36061, 36067, 36073, 36083, 36097, 36107, 36109, 36131, 36137, 36151, 36161, 36187, 36191, 36209, 36217, 36229, 36241, 36251, 36263, 36269, 36277, 36293, 36299, 36307, 36313, 36319, 36341, 36343, 36353, 36373, 36383, 36389, 36433, 36451, 36457, 36467, 36469, 36473, 36479, 36493, 36497, 36523, 36527, 36529, 36541, 36551, 36559, 36563, 36571, 36583, 36587, 36599, 36607, 36629, 36637, 36643, 36653, 36671, 36677, 36683, 36691, 36697, 36709, 36713, 36721, 36739, 36749, 36761, 36767, 36779, 36781, 36787, 36791, 36793, 36809, 36821, 36833, 36847, 36857, 36871, 36877, 36887, 36899, 36901, 36913, 36919, 36923, 36929, 36931, 36943, 36947, 36973, 36979, 36997, 37003, 37013, 37019, 37021, 37039, 37049, 37057, 37061, 37087, 37097, 37117, 37123, 37139, 37159, 37171, 37181, 37189, 37199, 37201, 37217, 37223, 37243, 37253, 37273, 37277, 37307, 37309, 37313, 37321, 37337, 37339, 37357, 37361, 37363, 37369, 37379, 37397, 37409, 37423, 37441, 37447, 37463, 37483, 37489, 37493, 37501, 37507, 37511, 37517, 37529, 37537, 37547, 37549, 37561, 37567, 37571, 37573, 37579, 37589, 37591, 37607, 37619, 37633, 37643, 37649, 37657, 37663, 37691, 37693, 37699, 37717, 37747, 37781, 37783, 37799, 37811, 37813, 37831, 37847, 37853, 37861, 37871, 37879, 37889, 37897, 37907, 37951, 37957, 37963, 37967, 37987, 37991, 37993, 37997, 38011, 38039, 38047, 38053, 38069, 38083, 38113, 38119, 38149, 38153, 38167, 38177, 38183, 38189, 38197, 38201, 38219, 38231, 38237, 38239, 38261, 38273, 38281, 38287, 38299, 38303, 38317, 38321, 38327, 38329, 38333, 38351, 38371, 38377, 38393, 38431, 38447, 38449, 38453, 38459, 38461, 38501, 38543, 38557, 38561, 38567, 38569, 38593, 38603, 38609, 38611, 38629, 38639, 38651, 38653, 38669, 38671, 38677, 38693, 38699, 38707, 38711, 38713, 38723, 38729, 38737, 38747, 38749, 38767, 38783, 38791, 38803, 38821, 38833, 38839, 38851, 38861, 38867, 38873, 38891, 38903, 38917, 38921, 38923, 38933, 38953, 38959, 38971, 38977, 38993, 39019, 39023, 39041, 39043, 39047, 39079, 39089, 39097, 39103, 39107, 39113, 39119, 39133, 39139, 39157, 39161, 39163, 39181, 39191, 39199, 39209, 39217, 39227, 39229, 39233, 39239, 39241, 39251, 39293, 39301, 39313, 39317, 39323, 39341, 39343, 39359, 39367, 39371, 39373, 39383, 39397, 39409, 39419, 39439, 39443, 39451, 39461, 39499, 39503, 39509, 39511, 39521, 39541, 39551, 39563, 39569, 39581, 39607, 39619, 39623, 39631, 39659, 39667, 39671, 39679, 39703, 39709, 39719, 39727, 39733, 39749, 39761, 39769, 39779, 39791, 39799, 39821, 39827, 39829, 39839, 39841, 39847, 39857, 39863, 39869, 39877, 39883, 39887, 39901, 39929, 39937, 39953, 39971, 39979, 39983, 39989, 40009, 40013, 40031, 40037, 40039, 40063, 40087, 40093, 40099, 40111, 40123, 40127, 40129, 40151, 40153, 40163, 40169, 40177, 40189, 40193, 40213, 40231, 40237, 40241, 40253, 40277, 40283, 40289, 40343, 40351, 40357, 40361, 40387, 40423, 40427, 40429, 40433, 40459, 40471, 40483, 40487, 40493, 40499, 40507, 40519, 40529, 40531, 40543, 40559, 40577, 40583, 40591, 40597, 40609, 40627, 40637, 40639, 40693, 40697, 40699, 40709, 40739, 40751, 40759, 40763, 40771, 40787, 40801, 40813, 40819, 40823, 40829, 40841, 40847, 40849, 40853, 40867, 40879, 40883, 40897, 40903, 40927, 40933, 40939, 40949, 40961, 40973, 40993, 41011, 41017, 41023, 41039, 41047, 41051, 41057, 41077, 41081, 41113, 41117, 41131, 41141, 41143, 41149, 41161, 41177, 41179, 41183, 41189, 41201, 41203, 41213, 41221, 41227, 41231, 41233, 41243, 41257, 41263, 41269, 41281, 41299, 41333, 41341, 41351, 41357, 41381, 41387, 41389, 41399, 41411, 41413, 41443, 41453, 41467, 41479, 41491, 41507, 41513, 41519, 41521, 41539, 41543, 41549, 41579, 41593, 41597, 41603, 41609, 41611, 41617, 41621, 41627, 41641, 41647, 41651, 41659, 41669, 41681, 41687, 41719, 41729, 41737, 41759, 41761, 41771, 41777, 41801, 41809, 41813, 41843, 41849, 41851, 41863, 41879, 41887, 41893, 41897, 41903, 41911, 41927, 41941, 41947, 41953, 41957, 41959, 41969, 41981, 41983, 41999, 42013, 42017, 42019, 42023, 42043, 42061, 42071, 42073, 42083, 42089, 42101, 42131, 42139, 42157, 42169, 42179, 42181, 42187, 42193, 42197, 42209, 42221, 42223, 42227, 42239, 42257, 42281, 42283, 42293, 42299, 42307, 42323, 42331, 42337, 42349, 42359, 42373, 42379, 42391, 42397, 42403, 42407, 42409, 42433, 42437, 42443, 42451, 42457, 42461, 42463, 42467, 42473, 42487, 42491, 42499, 42509, 42533, 42557, 42569, 42571, 42577, 42589, 42611, 42641, 42643, 42649, 42667, 42677, 42683, 42689, 42697, 42701, 42703, 42709, 42719, 42727, 42737, 42743, 42751, 42767, 42773, 42787, 42793, 42797, 42821, 42829, 42839, 42841, 42853, 42859, 42863, 42899, 42901, 42923, 42929, 42937, 42943, 42953, 42961, 42967, 42979, 42989, 43003, 43013, 43019, 43037, 43049, 43051, 43063, 43067, 43093, 43103, 43117, 43133, 43151, 43159, 43177, 43189, 43201, 43207, 43223, 43237, 43261, 43271, 43283, 43291, 43313, 43319, 43321, 43331, 43391, 43397, 43399, 43403, 43411, 43427, 43441, 43451, 43457, 43481, 43487, 43499, 43517, 43541, 43543, 43573, 43577, 43579, 43591, 43597, 43607, 43609, 43613, 43627, 43633, 43649, 43651, 43661, 43669, 43691, 43711, 43717, 43721, 43753, 43759, 43777, 43781, 43783, 43787, 43789, 43793, 43801, 43853, 43867, 43889, 43891, 43913, 43933, 43943, 43951, 43961, 43963, 43969, 43973, 43987, 43991, 43997, 44017, 44021, 44027, 44029, 44041, 44053, 44059, 44071, 44087, 44089, 44101, 44111, 44119, 44123, 44129, 44131, 44159, 44171, 44179, 44189, 44201, 44203, 44207, 44221, 44249, 44257, 44263, 44267, 44269, 44273, 44279, 44281, 44293, 44351, 44357, 44371, 44381, 44383, 44389, 44417, 44449, 44453, 44483, 44491, 44497, 44501, 44507, 44519, 44531, 44533, 44537, 44543, 44549, 44563, 44579, 44587, 44617, 44621, 44623, 44633, 44641, 44647, 44651, 44657, 44683, 44687, 44699, 44701, 44711, 44729, 44741, 44753, 44771, 44773, 44777, 44789, 44797, 44809, 44819, 44839, 44843, 44851, 44867, 44879, 44887, 44893, 44909, 44917, 44927, 44939, 44953, 44959, 44963, 44971, 44983, 44987, 45007, 45013, 45053, 45061, 45077, 45083, 45119, 45121, 45127, 45131, 45137, 45139, 45161, 45179, 45181, 45191, 45197, 45233, 45247, 45259, 45263, 45281, 45289, 45293, 45307, 45317, 45319, 45329, 45337, 45341, 45343, 45361, 45377, 45389, 45403, 45413, 45427, 45433, 45439, 45481, 45491, 45497, 45503, 45523, 45533, 45541, 45553, 45557, 45569, 45587, 45589, 45599, 45613, 45631, 45641, 45659, 45667, 45673, 45677, 45691, 45697, 45707, 45737, 45751, 45757, 45763, 45767, 45779, 45817, 45821, 45823, 45827, 45833, 45841, 45853, 45863, 45869, 45887, 45893, 45943, 45949, 45953, 45959, 45971, 45979, 45989, 46021, 46027, 46049, 46051, 46061, 46073, 46091, 46093, 46099, 46103, 46133, 46141, 46147, 46153, 46171, 46181, 46183, 46187, 46199, 46219, 46229, 46237, 46261, 46271, 46273, 46279, 46301, 46307, 46309, 46327, 46337, 46349, 46351, 46381, 46399, 46411, 46439, 46441, 46447, 46451, 46457, 46471, 46477, 46489, 46499, 46507, 46511, 46523, 46549, 46559, 46567, 46573, 46589, 46591, 46601, 46619, 46633, 46639, 46643, 46649, 46663, 46679, 46681, 46687, 46691, 46703, 46723, 46727, 46747, 46751, 46757, 46769, 46771, 46807, 46811, 46817, 46819, 46829, 46831, 46853, 46861, 46867, 46877, 46889, 46901, 46919, 46933, 46957, 46993, 46997, 47017, 47041, 47051, 47057, 47059, 47087, 47093, 47111, 47119, 47123, 47129, 47137, 47143, 47147, 47149, 47161, 47189, 47207, 47221, 47237, 47251, 47269, 47279, 47287, 47293, 47297, 47303, 47309, 47317, 47339, 47351, 47353, 47363, 47381, 47387, 47389, 47407, 47417, 47419, 47431, 47441, 47459, 47491, 47497, 47501, 47507, 47513, 47521, 47527, 47533, 47543, 47563, 47569, 47581, 47591, 47599, 47609, 47623, 47629, 47639, 47653, 47657, 47659, 47681, 47699, 47701, 47711, 47713, 47717, 47737, 47741, 47743, 47777, 47779, 47791, 47797, 47807, 47809, 47819, 47837, 47843, 47857, 47869, 47881, 47903, 47911, 47917, 47933, 47939, 47947, 47951, 47963, 47969, 47977, 47981, 48017, 48023, 48029, 48049, 48073, 48079, 48091, 48109, 48119, 48121, 48131, 48157, 48163, 48179, 48187, 48193, 48197, 48221, 48239, 48247, 48259, 48271, 48281, 48299, 48311, 48313, 48337, 48341, 48353, 48371, 48383, 48397, 48407, 48409, 48413, 48437, 48449, 48463, 48473, 48479, 48481, 48487, 48491, 48497, 48523, 48527, 48533, 48539, 48541, 48563, 48571, 48589, 48593, 48611
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment