Page MenuHomeHEPForge

permutation.cc
No OneTemporary

Size
74 KB
Referenced Files
None
Subscribers
None

permutation.cc

#include <cmath>
#include <cassert>
#include <climits>
#include <stdexcept>
#include <sstream>
#include "npstat/rng/permutation.hh"
#define MAX_PERM_LEN 20U
#define MAX_LD_FACTORIAL_ARG 1754U
#define LOGTWOPIOVERTWO 0.9189385332046727417803297364L
static inline void check_length(const unsigned permLen, const char* fcn,
bool isLength=true)
{
const unsigned soul = sizeof(unsigned long);
unsigned maxlen = 0U;
if (soul >= 8U)
maxlen = MAX_PERM_LEN;
else if (soul >= 4U)
maxlen = 12U;
else if (soul >= 2U)
maxlen = 8U;
if (permLen > maxlen)
{
std::ostringstream os;
os << "In npstat::" << fcn << ": ";
if (isLength)
os << "permutation length ";
os << "argument outside of supported range";
throw std::invalid_argument(os.str());
}
}
namespace npstat {
void randomPermutation(AbsRandomGenerator& gen,
unsigned *permutation, const unsigned permLen)
{
if (permLen)
{
assert(permutation);
for (unsigned i=0; i<permLen; ++i)
permutation[i] = i;
if (permLen > 1)
{
const unsigned plm1 = permLen-1;
for (unsigned i=0; i<plm1; ++i)
{
// It is important to swap only forward.
// Otherwise we won't get a uniform distribution
// over permutations.
unsigned iswap = i +
static_cast<unsigned>((permLen-i)*gen());
if (iswap >= permLen)
iswap = plm1;
const unsigned tmp(permutation[i]);
permutation[i] = permutation[iswap];
permutation[iswap] = tmp;
}
}
}
}
unsigned long permutationNumber(const unsigned *permutation,
const unsigned permLen)
{
if (!permLen) throw std::invalid_argument(
"In npstat::permutationNumber: empty permutation array");
assert(permutation);
if (permLen == 1U)
{
if (permutation[0] != 0U) throw std::invalid_argument(
"In npstat::permutationNumber: invalid permuted index");
return 0UL;
}
check_length(permLen, "permutationNumber");
unsigned long stride = 1UL;
unsigned long permNum = 0UL;
for (unsigned inum=0; inum<permLen-1; ++inum)
{
unsigned i = 0, icnt = 0;
for (; inum != permutation[i] && i < permLen; ++i)
if (inum < permutation[i])
++icnt;
if (i >= permLen) throw std::invalid_argument(
"In npstat::permutationNumber: invalid permuted index");
permNum += icnt*stride;
stride *= (permLen - inum);
}
return permNum;
}
void orderedPermutation(unsigned long permutationNumber,
unsigned *permutation, const unsigned permLen)
{
if (!permLen) throw std::invalid_argument(
"In npstat::orderedPermutation: empty permutation array");
assert(permutation);
if (permLen == 1U)
{
if (permutationNumber != 0UL) throw std::invalid_argument(
"In npstat::orderedPermutation: "
"permutation number out of range");
permutation[0] = 0UL;
return;
}
check_length(permLen, "orderedPermutation");
unsigned long strides[MAX_PERM_LEN];
unsigned long stride = 1UL;
for (unsigned inum=0; inum<permLen; ++inum)
{
strides[inum] = stride;
stride *= (permLen - inum);
}
if (permutationNumber >= stride) throw std::invalid_argument(
"In npstat::orderedPermutation: "
"permutation number out of range");
unsigned posnum[MAX_PERM_LEN];
const unsigned pmLm1 = permLen-1;
for (unsigned itmp=pmLm1; itmp>0; --itmp)
{
const unsigned inum = itmp - 1;
posnum[inum] = permutationNumber / strides[inum];
permutationNumber %= strides[inum];
}
for (unsigned i=0; i<permLen; ++i)
permutation[i] = pmLm1;
permutation[posnum[0]] = 0U;
for (unsigned ipos=1; ipos<pmLm1; ++ipos)
{
const unsigned newpos = posnum[ipos];
unsigned cnt = 0U;
for (unsigned j=0; j<permLen; ++j)
if (permutation[j] > ipos)
if (cnt++ == newpos)
{
permutation[j] = ipos;
break;
}
}
}
unsigned long factorial(const unsigned n)
{
check_length(n, "factorial", false);
unsigned long f = 1UL;
for (unsigned i=2U; i<=n; ++i)
f *= i;
return f;
}
unsigned long intPower(const unsigned ain, const unsigned n)
{
if (n == 0)
return 1UL;
else
{
const unsigned long a = ain;
unsigned long result = a;
for (unsigned i=1; i<n; ++i)
{
if (!(ULONG_MAX/ain > result)) throw std::overflow_error(
"In npstat::intPower: result is too large");
result *= a;
}
return result;
}
}
long double ldfactorial(const unsigned n)
{
// On Intel machines, max value for long double is 1.18973e+4932
// In Mathematica: Table[N[n!, 25], {n, 0, 1754}]//CForm >> table.txt
const unsigned nentries = MAX_LD_FACTORIAL_ARG + 1U;
static const long double table[nentries] = {
1.L, 1.L, 2.L, 6.L, 24.L, 120.L, 720.L, 5040.L, 40320.L,
362880.L, 3.6288e6L, 3.99168e7L, 4.790016e8L, 6.2270208e9L,
8.71782912e10L, 1.307674368e12L, 2.0922789888e13L,
3.55687428096e14L, 6.402373705728e15L, 1.21645100408832e17L,
2.43290200817664e18L, 5.109094217170944e19L,
1.12400072777760768e21L, 2.585201673888497664e22L,
6.2044840173323943936e23L, 1.5511210043330985984e25L,
4.03291461126605635584e26L, 1.0888869450418352160768e28L,
3.04888344611713860501504e29L, 8.841761993739701954543616e30L,
2.652528598121910586363085e32L, 8.222838654177922817725563e33L,
2.63130836933693530167218e35L, 8.683317618811886495518194e36L,
2.952327990396041408476186e38L, 1.033314796638614492966665e40L,
3.719933267899012174679994e41L, 1.376375309122634504631598e43L,
5.230226174666011117600072e44L, 2.039788208119744335864028e46L,
8.159152832478977343456113e47L, 3.345252661316380710817006e49L,
1.405006117752879898543143e51L, 6.041526306337383563735513e52L,
2.658271574788448768043626e54L, 1.196222208654801945619632e56L,
5.502622159812088949850305e57L, 2.586232415111681806429644e59L,
1.241391559253607267086229e61L, 6.082818640342675608722522e62L,
3.041409320171337804361261e64L, 1.551118753287382280224243e66L,
8.065817517094387857166064e67L, 4.274883284060025564298014e69L,
2.308436973392413804720927e71L, 1.26964033536582759259651e73L,
7.109985878048634518540456e74L, 4.05269195048772167556806e76L,
2.350561331282878571829475e78L, 1.38683118545689835737939e80L,
8.320987112741390144276341e81L, 5.075802138772247988008568e83L,
3.146997326038793752565312e85L, 1.982608315404440064116147e87L,
1.268869321858841641034334e89L, 8.24765059208247066672317e90L,
5.443449390774430640037292e92L, 3.647111091818868528824986e94L,
2.48003554243683059960099e96L, 1.711224524281413113724683e98L,
1.197857166996989179607278e100L, 8.504785885678623175211676e101L,
6.123445837688608686152407e103L, 4.470115461512684340891257e105L,
3.30788544151938641225953e107L, 2.480914081139539809194648e109L,
1.885494701666050254987932e111L, 1.451830920282858696340708e113L,
1.132428117820629783145752e115L, 8.946182130782975286851442e116L,
7.156945704626380229481153e118L, 5.797126020747367985879734e120L,
4.753643337012841748421382e122L, 3.945523969720658651189747e124L,
3.314240134565353266999388e126L, 2.817104114380550276949479e128L,
2.422709538367273238176552e130L, 2.107757298379527717213601e132L,
1.854826422573984391147968e134L, 1.650795516090846108121692e136L,
1.485715964481761497309523e138L, 1.352001527678402962551666e140L,
1.243841405464130725547532e142L, 1.156772507081641574759205e144L,
1.087366156656743080273653e146L, 1.03299784882390592625997e148L,
9.916779348709496892095714e149L, 9.619275968248211985332843e151L,
9.426890448883247745626186e153L, 9.332621544394415268169924e155L,
9.332621544394415268169924e157L, 9.425947759838359420851623e159L,
9.614466715035126609268656e161L, 9.902900716486180407546715e163L,
1.029901674514562762384858e166L, 1.081396758240290900504101e168L,
1.146280563734708354534347e170L, 1.226520203196137939351752e172L,
1.324641819451828974499892e174L, 1.443859583202493582204882e176L,
1.58824554152274294042537e178L, 1.762952551090244663872161e180L,
1.97450685722107402353682e182L, 2.231192748659813646596607e184L,
2.543559733472187557120132e186L, 2.925093693493015690688152e188L,
3.393108684451898201198256e190L, 3.96993716080872089540196e192L,
4.684525849754290656574312e194L, 5.574585761207605881323432e196L,
6.689502913449127057588118e198L, 8.094298525273443739681623e200L,
9.87504420083360136241158e202L, 1.214630436702532967576624e205L,
1.506141741511140879795014e207L, 1.882677176888926099743768e209L,
2.372173242880046885677147e211L, 3.012660018457659544809977e213L,
3.856204823625804217356771e215L, 4.974504222477287440390234e217L,
6.466855489220473672507304e219L, 8.471580690878820510984569e221L,
1.118248651196004307449963e224L, 1.487270706090685728908451e226L,
1.992942746161518876737324e228L, 2.690472707318050483595388e230L,
3.659042881952548657689727e232L, 5.012888748274991661034926e234L,
6.917786472619488492228198e236L, 9.615723196941089004197196e238L,
1.346201247571752460587607e241L, 1.898143759076170969428526e243L,
2.695364137888162776588508e245L, 3.854370717180072770521566e247L,
5.550293832739304789551055e249L, 8.047926057471991944849029e251L,
1.174997204390910823947958e254L, 1.727245890454638911203499e256L,
2.556323917872865588581178e258L, 3.808922637630569726985955e260L,
5.713383956445854590478933e262L, 8.627209774233240431623189e264L,
1.311335885683452545606725e267L, 2.006343905095682394778289e269L,
3.089769613847350887958565e271L, 4.789142901463393876335775e273L,
7.471062926282894447083809e275L, 1.172956879426414428192158e278L,
1.85327186949373479654361e280L, 2.94670227249503832650434e282L,
4.714723635992061322406943e284L, 7.590705053947218729075179e286L,
1.229694218739449434110179e289L, 2.004401576545302577599592e291L,
3.28721858553429622726333e293L, 5.423910666131588774984495e295L,
9.003691705778437366474262e297L, 1.503616514864999040201202e300L,
2.526075744973198387538019e302L, 4.269068009004705274939252e304L,
7.257415615307998967396728e306L, 1.241018070217667823424841e309L,
2.134551080774388656290726e311L, 3.692773369739692375382955e313L,
6.425425663347064733166343e315L, 1.12444949108573632830411e318L,
1.979031104310895937815233e320L, 3.502885054630285809932963e322L,
6.235135397241908741680675e324L, 1.116089236106301664760841e327L,
2.008960624991342996569513e329L, 3.636218731234330823790819e331L,
6.617918090846482099299291e333L, 1.21107901062490622417177e336L,
2.228385379549827452476057e338L, 4.122512952167180787080706e340L,
7.667874091030956263970113e342L, 1.433892455022788821362411e345L,
2.695717815442842984161333e347L, 5.094906671186973240064919e349L,
9.680322675255249156123347e351L, 1.848941630973752588819559e354L,
3.549967931469604970533554e356L, 6.851438107736337593129759e358L,
1.329178992900849493067173e361L, 2.591899036156656511480988e363L,
5.080122110867046762502736e365L, 1.000784055840808212213039e368L,
1.981552430564800260181817e370L, 3.943289336823952517761816e372L,
7.886578673647905035523632e374L, 1.58520231340322891214025e377L,
3.202108673074522402523305e379L, 6.500280606341280477122309e381L,
1.326057243693621217332951e384L, 2.71841734957192349553255e386L,
5.599939740118162400797053e388L, 1.15918752620445961696499e391L,
2.411110054505276003287179e393L, 5.039220013916026846870204e395L,
1.058236202922365637842743e398L, 2.232878388166191495848187e400L,
4.733702182912325971198157e402L, 1.008278564960325431865208e405L,
2.157716129015096424191544e407L, 4.63908967738245731201182e409L,
1.002043370314610779394553e412L, 2.17443411358270539128618e414L,
4.740266367610297753003873e416L, 1.038118334506655207907848e419L,
2.283860335914641457397266e421L, 5.047331342371357620847958e423L,
1.120507558006441391828247e426L, 2.49873185435436430377699e428L,
5.597159353753776040460457e430L, 1.259360854594599609103603e433L,
2.846155531383795116574143e435L, 6.460773056241214914623304e437L,
1.473056256822997000534113e440L, 3.373298828124663131223119e442L,
7.758587304686725201813174e444L, 1.792233667382633521618843e447L,
4.157982108327709770155716e449L, 9.688098312403563764462819e451L,
2.2670150051024339208843e454L, 5.327485261990719714078104e456L,
1.257286521829809852522433e459L, 2.979769056736649350478165e461L,
7.091850355033225454138033e463L, 1.69495223485294088353899e466L,
4.067885363647058120493576e468L, 9.803603726389410070389518e470L,
2.372472101786237237034263e473L, 5.76510720734055648599326e475L,
1.406686158591095782582355e478L, 3.446381088548184667326771e480L,
8.478097477828534281623856e482L, 2.094090077023647967561092e485L,
5.193343391018646959551509e487L, 1.293142504363643092928326e490L,
3.232856260909107732320815e492L, 8.114469214881860408125245e494L,
2.044846242150228822847562e497L, 5.173460992640078921804331e499L,
1.3140590921305800461383e502L, 3.350850684932979117652665e504L,
8.578177753428426541190823e506L, 2.204591682631105621086041e509L,
5.687846541188252502401987e511L, 1.473152254167757398122115e514L,
3.830195860836169235117498e516L, 9.99681119678240170365667e518L,
2.619164533556989246358047e521L, 6.888402723254881717921665e523L,
1.81853831893928877353132e526L, 4.819126545189115249857997e528L,
1.281887661020304656462227e531L, 3.422640054924213432754146e533L,
9.172675347196891999781112e535L, 2.467449668395963947941119e538L,
6.662114104669102659441022e540L, 1.805432922365326820708517e543L,
4.910777548833688952327166e545L, 1.340642270831597083985316e548L,
3.673359822078576010119767e550L, 1.010173951071608402782936e553L,
2.788080104957639191680903e555L, 7.722981890732660560956101e557L,
2.146988965623679635945796e560L, 5.990099214090066184288771e562L,
1.677227779945218531600856e565L, 4.713010061646064073798405e567L,
1.32906883738419006881115e570L, 3.761264809797257894735555e572L,
1.068199205982421242104898e575L, 3.044367737049900539998958e577L,
8.706891727962715544397021e579L, 2.498877925925299361241945e582L,
7.196768426664862160376802e584L, 2.079866075306145164348896e587L,
6.031611618387820976611798e589L, 1.755198980950855904194033e592L,
5.125181024376499240246577e594L, 1.501678040142314277392247e597L,
4.414933438018403975533206e599L, 1.302405364215429172782296e602L,
3.855119878077670351435596e604L, 1.144970603789068094376372e607L,
3.412012399291422921241588e609L, 1.020191707388135453451235e612L,
3.060575122164406360353705e614L, 9.212331117714863144664651e616L,
2.782123997549888669688725e619L, 8.429835712576162669156835e621L,
2.562670056623153451423678e624L, 7.816143672700618026842218e626L,
2.391739963846389116213719e629L, 7.342641689008414586776116e631L,
2.261533640214591692727044e634L, 6.988138948263088330526565e636L,
2.166323073961557382463235e639L, 6.737264760020443459460662e641L,
2.102026605126378359351726e644L, 6.579343274045564264770904e646L,
2.065913788050307179138064e649L, 6.507628432358467614284901e651L,
2.056410584625275766114029e654L, 6.518821553262124178581471e656L,
2.072985253937355488788908e659L, 6.612822960060164009236616e661L,
2.116103347219252482955717e664L, 6.792691744573800470287852e666L,
2.187246741752763751432688e669L, 7.064806975861426917127583e671L,
2.288997460179102321149337e674L, 7.439241745582082543735345e676L,
2.425192809059758909257722e679L, 7.930380485625411633272752e681L,
2.601164799285135015713463e684L, 8.557832189648094201697293e686L,
2.824084622583871086560107e689L, 9.347720100752613296513953e691L,
3.103443073449867614442632e694L, 1.033446543458805915609397e697L,
3.451711455152411758135384e699L, 1.156323337476057938975354e702L,
3.885246413919554674957189e704L, 1.309328041490889925460573e707L,
4.425528780239207948056735e709L, 1.500254256501091494391233e712L,
5.100864472103711080930193e714L, 1.739394784987365478597196e717L,
5.94873016465678993680241e719L, 2.040414446477278948323227e722L,
7.0190256958818395822319e724L, 2.421563865079234655870005e727L,
8.378610973174151909310219e729L, 2.907378007691430712530646e732L,
1.011767546676617887960665e735L, 3.53106873790139642898272e737L,
1.235874058265488750143952e740L, 4.337917944511865513005272e742L,
1.526947116468176660577856e745L, 5.39012332113266361183983e747L,
1.9081036556809629185913e750L, 6.773767977667418360999115e752L,
2.411461400049600936515685e755L, 8.608917198177075343360995e757L,
3.081992356947392972923236e760L, 1.106435256144114077279442e763L,
3.98316692211881067820599e765L, 1.437923258884890654832363e768L,
5.205282197163304170493152e770L, 1.889517437570279413889014e773L,
6.877843472755817066556012e775L, 2.510412867555873229292944e778L,
9.188111095254496019212176e780L, 3.372036771958400039050869e783L,
1.24090953208069121437072e786L, 4.578956173377750581027956e788L,
1.694213784149767714980344e791L, 6.285533139195638222577075e793L,
2.338218327780777418798672e796L, 8.721554362622299772119046e798L,
3.261861331620740114772523e801L, 1.223197999357777543039696e804L,
4.599224477585243561829258e806L, 1.73390762804963682280963e809L,
6.554170834027627190220402e811L, 2.484030746096470705093532e814L,
9.439316835166588679355423e816L, 3.596379714198470286834416e819L,
1.373817050823815649570747e822L, 5.261719304655213937855961e824L,
2.020500212987602152136689e827L, 7.778925820002268285726252e829L,
3.002665366520875558290333e832L, 1.162031496843578841058359e835L,
4.508682207753085903306433e837L, 1.753877378815950416386202e840L,
6.84012177738220662390619e842L, 2.67448761495644278994732e845L,
1.048399145062925573659349e848L, 4.120208640097297504481244e850L,
1.62336220419833521676561e853L, 6.412280706583424106224159e855L,
2.539263159807035946064767e858L, 1.008087474443393270587713e861L,
4.012188148284705216939096e863L, 1.600863071165597381558699e866L,
6.403452284662389526234797e868L, 2.567784366149618200020154e871L,
1.032249315192146516408102e874L, 4.15996474022435046112465e876L,
1.680625755050637586294359e879L, 6.806534307955082224492152e881L,
2.763452929029763383143814e884L, 1.124725342115113696939532e887L,
4.588879395829663883513292e889L, 1.876851672894332528356936e892L,
7.695091858866763366263439e894L, 3.162682753994239743534273e897L,
1.303025294645626774336121e900L, 5.381494466886438578008178e902L,
2.227938709290985571295386e905L, 9.245945643557590120875851e907L,
3.846313387719957490284354e910L, 1.603912682679222273448576e913L,
6.704355013599149103015046e915L, 2.809124750698043474163304e918L,
1.179832395293178259148588e921L, 4.967094384184280471015555e923L,
2.096113830125766358768564e926L, 8.866561501431991697591026e928L,
3.759422076607164479778595e931L, 1.597754382558044903905903e934L,
6.806433669697271290639146e936L, 2.906347176960734841102915e939L,
1.243916591739194511992048e942L, 5.336402178561144456445885e944L,
2.294652936781292116271731e947L, 9.889954157527369021131159e949L,
4.272460196051823417128661e952L, 1.84997526489043953961671e955L,
8.028892649624507601936522e957L, 3.492568302586660806842387e960L,
1.522759779927784111783281e963L, 6.654460238284416568492937e965L,
2.914653584368574456999906e968L, 1.279532923537804186622959e971L,
5.629944863566338421141019e973L, 2.482805684832755243723189e976L,
1.09740011269607781772565e979L, 4.861482499243624732524628e981L,
2.158498229664169381240935e984L, 9.60531712200555374652216e986L,
4.283971436414476970948883e989L, 1.914935232077271206014151e992L,
8.578909839706175002943396e994L, 3.851930518028072576321585e997L,
1.733368733112632659344713e1000L, 7.817492986337973293644656e1002L,
3.533506829824763928727385e1005L, 1.600678593910618059713505e1008L,
7.267080816354205991099314e1010L, 3.306521771441163725950188e1013L,
1.507773927777170659033286e1016L, 6.890526849941669911782115e1018L,
3.155861297273284819596209e1021L, 1.44854033544843773219466e1024L,
6.663285543062813568095435e1026L, 3.071774635351957054891996e1029L,
1.419159881532604159360102e1032L, 6.570710251495957257837272e1034L,
3.048809556694124167636494e1037L, 1.41769644386276773795097e1040L,
6.60646542840049765885152e1042L, 3.08521935506303240668366e1045L,
1.443882658169499166327953e1048L, 6.771809666814951090078098e1050L,
3.182750543403027012336706e1053L, 1.499075505942825722810589e1056L,
7.075636388050137411665978e1058L, 3.346776011547714995718008e1061L,
1.586371829473616907970336e1064L, 7.535266189999680312859094e1066L,
3.586786706439847828920929e1069L, 1.710897258971807414395283e1072L,
8.178088897885239440809453e1074L, 3.917304582087029692147728e1077L,
1.880306199401774252230909e1080L, 9.044272819122534153230675e1082L,
4.359339498817061461857185e1085L, 2.10556097792864068607702e1088L,
1.019091513317462092061278e1091L, 4.942593839589691146497198e1093L,
2.402100606040589897197638e1096L, 1.16982299514176727993525e1099L,
5.708736216291824326084019e1101L, 2.791572009766702095455085e1104L,
1.367870284785684026772992e1107L, 6.716243098297708571455389e1109L,
3.304391604362472617156052e1112L, 1.629065060950699000257933e1115L,
8.047581401096453061274191e1117L, 3.983552793542744265330725e1120L,
1.975842185597201155604039e1123L, 9.819935662418089743352076e1125L,
4.890327959884208692189334e1128L, 2.440273651982220137402478e1131L,
1.220136825991110068701239e1134L, 6.112885498215461444193206e1136L,
3.06866852010416164498499e1139L, 1.54354026561239330742745e1142L,
7.779442938686462269434347e1144L, 3.928618684036663446064345e1147L,
1.987881054122551703708559e1150L, 1.007855694440133713780239e1153L,
5.119906927755879266003615e1155L, 2.60603262622774254639584e1158L,
1.329076639376148698661878e1161L, 6.791581627212119850162199e1163L,
3.477289793132605363283046e1166L, 1.783849663877026551364203e1169L,
9.168987272327916474012001e1171L, 4.722028445248876984116181e1174L,
2.436566677748420523803949e1177L, 1.259704972395933410806642e1180L,
6.525271757010935067978404e1182L, 3.386616041888675300280792e1185L,
1.761040341782111156146012e1188L, 9.175020180684799123520721e1190L,
4.789360534317465142477816e1193L, 2.504835559448034269515898e1196L,
1.312533833150769957226331e1199L, 6.890802624041542275438235e1201L,
3.624562180245851236880512e1204L, 1.91014426898956360183603e1207L,
1.008556174026489581769424e1210L, 5.335262160600129887560251e1212L,
2.827688945118068840406933e1215L, 1.501502829857694554256082e1218L,
7.987995054842935028642354e1220L, 4.257601364231284370266375e1223L,
2.273559128499505853722244e1226L, 1.216354133747235631741401e1229L,
6.519658156885182986133907e1231L, 3.501056430247343263553908e1234L,
1.883568359473070675792002e1237L, 1.015243345755985094251889e1240L,
5.482314067082319508960202e1242L, 2.96593191029153485434747e1245L,
1.607535095378011891056328e1248L, 8.728915567902604568435864e1250L,
4.74853006893901688522911e1253L, 2.587948887571764202449865e1256L,
1.413020092614183254537626e1259L, 7.729219906599582402320815e1261L,
4.235612508816571156471807e1264L, 2.325351267340297564903022e1267L,
1.278943197037163660696662e1270L, 7.046977015674771770438608e1272L,
3.889931312652474017282112e1275L, 2.151132015896818131557008e1278L,
1.191727136806837244882582e1281L, 6.614085609277946709098332e1283L,
3.677431598758538370258672e1286L, 2.048329400508505872234081e1289L,
1.142967805483746276706617e1292L, 6.389190032654141686789989e1294L,
3.577946418286319344602394e1297L, 2.007227940658625152321943e1300L,
1.128062102650147335604932e1303L, 6.350989637920329499455766e1305L,
3.581958155787065837693052e1308L, 2.023806358019692198296575e1311L,
1.145474398639145784235861e1314L, 6.494839840283956596617333e1316L,
3.689069029281287346878645e1319L, 2.099080277661052500373949e1322L,
1.196475758266799925213151e1325L, 6.831876579703427572967092e1327L,
3.907833403590360571737177e1330L, 2.239188540257276607605402e1333L,
1.285294222107676772765501e1336L, 7.39044177711914144340163e1338L,
4.256894463620625471399339e1341L, 2.456228105509100896997419e1344L,
1.419699844984260318464508e1347L, 8.220062102458867243909501e1349L,
4.76763601942614300146751e1352L, 2.769996527286589083852624e1355L,
1.612137978880794846802227e1358L, 9.398764416875033956856983e1360L,
5.488878419455019830804478e1363L, 3.21099387538118660102062e1366L,
1.881642410973375348198083e1369L, 1.104524095241371329392275e1372L,
6.494601680019263416826576e1374L, 3.825320389531346152510853e1377L,
2.256939029823494229981403e1380L, 1.333850966625685089919009e1383L,
7.896397722424055732320536e1385L, 4.682563849397465049266078e1388L,
2.78144292654209423926405e1391L, 1.65495854129254607236211e1394L,
9.863552906103574591278174e1396L, 5.88854108494383403099307e1399L,
3.521347568796412750533856e1402L, 2.10928719370905123756978e1405L,
1.265572316225430742541868e1408L, 7.606089620514838762676626e1410L,
4.578865951549932935131329e1413L, 2.761056168784609559884191e1416L,
1.667677925945904174170051e1419L, 1.008945145197272025372881e1422L,
6.11420757989546847375966e1424L, 3.711324000996549363572113e1427L,
2.256484992605902013051845e1430L, 1.374199360496994325948574e1433L,
8.382616099031665388286299e1435L, 5.121778436508347552242929e1438L,
3.134528403143108701972672e1441L, 1.921465911126725634309248e1444L,
1.179780069431809539465878e1447L, 7.255647427005628667715152e1449L,
4.469478815035467259312534e1452L, 2.757668428876883298995833e1455L,
1.704239089045913878779425e1458L, 1.054923996119420690964464e1461L,
6.540528775940408283979677e1463L, 4.061668369858993544351379e1466L,
2.526357726052293984586558e1469L, 1.573920863330579152397426e1472L,
9.821266187182813910959936e1474L, 6.13829136698925869434996e1477L,
3.842570395735275942663075e1480L, 2.409291638126018016049748e1483L,
1.513035148743139314079242e1486L, 9.51699108559434628555843e1488L,
5.995704383924438159901811e1491L, 3.783289466256320478898043e1494L,
2.391038942673994542663563e1497L, 1.513527650712638545506035e1500L,
9.595765305518128378508265e1502L, 6.093310969004011520352748e1505L,
3.875345776286551326944348e1508L, 2.46859525949453319526355e1511L,
1.574963775557512178578145e1514L, 1.006401852581250282111434e1517L,
6.44097185652000180551318e1519L, 4.128662960029321157333948e1522L,
2.650601620338824183008395e1525L, 1.704336841877863949674398e1528L,
1.097592926169344383590312e1531L, 7.079474373792271274157514e1533L,
4.573340445469807243105754e1536L, 2.958951268218965286289423e1539L,
1.917400421805889505515546e1542L, 1.244392873752022289079589e1545L,
8.088553679388144879017331e1547L, 5.265648445281682316240282e1550L,
3.433202786323656870188664e1553L, 2.241881419469347936233198e1556L,
1.466190448332953550296511e1559L, 9.603547436580845754442149e1561L,
6.29992711839703481491405e1564L, 4.139052116786851873398531e1567L,
2.723496292845748532696233e1570L, 1.794784056985348283046818e1573L,
1.1845574776103298668109e1576L, 7.829924927004280419620047e1578L,
5.183410301676833637788471e1581L, 3.436601030011740701853756e1584L,
2.281903083927795826030894e1587L, 1.517465550811984224310545e1590L,
1.010632056840781493390823e1593L, 6.740915819128012560916787e1595L,
4.502931767177512390692414e1598L, 3.012461352241755789373225e1601L,
2.018349106001976378880061e1604L, 1.354312250127326150228521e1607L,
9.100978320855631729535659e1609L, 6.124958409935840153977499e1612L,
4.128221968296756263780834e1615L, 2.786549828600310478052063e1618L,
1.883707684133809883163195e1621L, 1.275270102158589290901483e1624L,
8.646331292635235392312053e1626L, 5.870858947699324831379884e1629L,
3.992184084435540885338321e1632L, 2.718677361500603342915397e1635L,
1.854137960543411479868301e1638L, 1.266376227051150040750049e1641L,
8.662013393029866278730337e1643L, 5.933479174225458400930281e1646L,
4.070366713518664463038173e1649L, 2.796341932187322486107225e1652L,
1.923883249344877870441771e1655L, 1.32555555879862085273438e1658L,
9.146333355710483883867222e1660L, 6.32011634879594436375225e1663L,
4.373520513366793499716557e1666L, 3.030849715763187895303574e1669L,
2.10340970273965239934068e1672L, 1.461869743404058417541773e1675L,
1.017461341409224658609074e1678L, 7.091705549622295870505245e1680L,
4.950010473636362517612661e1683L, 3.46005732107181739981125e1686L,
2.422040124750272179867875e1689L, 1.69785012744994079808738e1692L,
1.191890789469858440257341e1695L, 8.378992249973104835009108e1697L,
5.898810543981065803846412e1700L, 4.15866143350665139171172e1703L,
2.936014972055695882548475e1706L, 2.075762585243376988961772e1709L,
1.469639910352310908184934e1712L, 1.041974696439788433903118e1715L,
7.39802034472249788071214e1717L, 5.259992465097695993186332e1720L,
3.745114635149559547148668e1723L, 2.670266734861635957117e1726L,
1.906570448691208073381538e1729L, 1.3631978708142137724678e1732L,
9.760496755029770610869447e1734L, 6.998276173356345527993394e1737L,
5.024762292469856089099257e1740L, 3.612804088285826528062366e1743L,
2.601218943565795100204903e1746L, 1.875478858310938267247735e1749L,
1.354095735700497428952865e1752L, 9.790112169114596411329213e1754L,
7.08804121043896780180235e1757L, 5.138829877568251656306704e1760L,
3.730790491114550702478667e1763L, 2.712284687040278360701991e1766L,
1.974543252165322646591049e1769L, 1.439442030828520209364875e1772L,
1.050792682504819752836359e1775L, 7.681294509110232393233782e1777L,
5.622707580668690111847129e1780L, 4.121444656630149851983945e1783L,
3.025140377966529991356216e1786L, 2.223478177805399543646819e1789L,
1.636479938864774064124059e1792L, 1.206085714943338485259431e1795L,
8.900912576281838021214602e1797L, 6.577774393872278297677591e1800L,
4.867553051465485940281417e1803L, 3.60685681113592508174853e1806L,
2.676287753862856410657409e1809L, 1.988481801120102313118455e1812L,
1.479430460033356120960131e1815L, 1.102175692724850310115297e1818L,
8.222230667727383313460118e1820L, 6.142006308792355335154708e1823L,
4.594220718976681790695722e1826L, 3.441071318513534661231096e1829L,
2.580803488885150995923322e1832L, 1.938183420152748397938415e1835L,
1.457513931954866795249688e1838L, 1.097507990762014696823015e1841L,
8.275210250345590814045532e1843L, 6.247783739010921064604377e1846L,
4.723324506692256324840909e1849L, 3.575556651566038037904568e1852L,
2.710271941887056832731663e1855L, 2.057096403892276136043332e1858L,
1.563393266958129863392932e1861L, 1.189742276155136826042021e1864L,
9.065836144302142614440203e1866L, 6.917232978102534814817875e1869L,
5.284765995270336598520857e1872L, 4.042845986381807497868455e1875L,
3.096820025568464543367237e1878L, 2.375260959611012304762671e1881L,
1.824200416981257450057731e1884L, 1.402810120658586979094395e1887L,
1.080163792907111973902684e1890L, 8.328062843313833318789696e1892L,
6.429264515038279322105645e1895L, 4.969821470124589915987664e1898L,
3.846641817876432594974452e1901L, 2.9811474088542352611052e1904L,
2.313370389270886562617635e1907L, 1.797488792463478859153903e1910L,
1.398446280536586552421736e1913L, 1.089389652538000924336532e1916L,
8.497239289796407209824953e1918L, 6.636343885330994030873289e1921L,
5.189620918328837332142912e1924L, 4.0634731790514796310679e1927L,
3.185762972376360030757233e1930L, 2.500823933315442624144428e1933L,
1.965647611585937902577521e1936L, 1.546964670318133129328509e1939L,
1.219008160210688905910865e1942L, 9.617974384062335467636724e1944L,
7.598199763409245019433012e1947L, 6.010176012856712810371512e1950L,
4.760059402182516545814238e1953L, 3.774727105930735620830691e1956L,
2.997133322109004082939568e1959L, 2.382720991076658245936957e1962L,
1.896645908897019963765818e1965L, 1.511626789390924911121357e1968L,
1.206278177933958079074843e1971L, 9.638162641692325051807992e1973L,
7.710530113353860041446394e1976L, 6.176134620796441893198562e1979L,
4.953259965878746398345246e1982L, 3.977467752600633357871233e1985L,
3.197884073090909219728471e1988L, 2.574296678838181921881419e1991L,
2.074883123143574629036424e1994L, 1.674430680376864725632394e1997L,
1.352939989744506698310974e2000L, 1.094528451703305918933578e2003L,
8.865680458796777943361985e2005L, 7.19006685208418691206657e2008L,
5.838334283892359772598054e2011L, 4.746565772804488495122218e2014L,
3.863704539062853635029486e2017L, 3.148919199336225712549031e2020L,
2.569518066658360181440009e2023L, 2.099296260459880268236487e2026L,
1.717224341056182059417447e2029L, 1.406406735325013106662889e2032L,
1.153253522966510747463569e2035L, 9.468211423555053236675901e2037L,
7.78286979016225376054759e2040L, 6.405301837303534844930667e2043L,
5.277968713938112712222869e2046L, 4.354324188998942987583867e2049L,
3.596671780113126907744274e2052L, 2.974447562153555952704515e2055L,
2.462842581463144328839338e2058L, 2.041696500032946648607811e2061L,
1.694608095027345718344484e2064L, 1.408219326967724291944266e2067L,
1.171638480037146610897629e2070L, 9.759748538709431268777251e2072L,
8.139630281283665678160227e2075L, 6.79659128487186084126379e2078L,
5.681950314152875663296528e2081L, 4.755792412945956930179194e2084L,
3.985354042048711907490165e2087L, 3.343712041278869290384248e2090L,
2.808718114674250203922768e2093L, 2.362131934441044421499048e2096L,
1.988915088799359402902199e2099L, 1.676655419857859976646553e2102L,
1.415097174360033820289691e2105L, 1.195757112334228578144789e2108L,
1.011610517034757377110491e2111L, 8.568341079284394984125863e2113L,
7.265953235233166946538732e2116L, 6.168794296712958737611383e2119L,
5.243475152206014926969676e2122L, 4.462197354527318702851194e2125L,
3.801792146057275534829217e2128L, 3.242928700586856031209322e2131L,
2.769461110301175050652761e2134L, 2.367889249307504668308111e2137L,
2.026913197407223996071743e2140L, 1.737064610177990964633484e2143L,
1.490401435532716247655529e2146L, 1.280254833122603256736099e2149L,
1.101019156485438800793046e2152L, 9.479774937339628074828122e2154L,
8.171565995986759400501841e2157L, 7.052061454536573362633089e2160L,
6.092981096719599385314989e2163L, 5.270428648662453468297465e2166L,
4.564191209741684703545605e2169L, 3.95715377884604063797404e2172L,
3.434809480038363273761466e2175L, 2.984849438153337684898714e2178L,
2.596819011193403785861881e2181L, 2.261829358749454697485699e2184L,
1.972315200829524496207529e2187L, 1.721831170324174885189173e2190L,
1.504880442863328849655337e2193L, 1.31677038750541274344842e2196L,
1.153490859454741563260816e2199L, 1.011611483741808350979736e2202L,
8.881948827253077321602079e2204L, 7.807233019155454965688227e2207L,
6.87036505685680036980564e2210L, 6.052791615090841125798769e2213L,
5.338562204510121872954514e2216L, 4.713950426582437613818836e2219L,
4.167132177098874850615851e2222L, 3.687911976732504242795028e2225L,
3.267490011384998759116395e2228L, 2.898263640098493899336242e2231L,
2.573658112407462582610583e2234L, 2.287982061930234235940808e2237L,
2.036304035117908469987319e2240L, 1.814346895290056446758702e2243L,
1.618397430598730350508762e2246L, 1.445228905524666203004324e2249L,
1.292034641539051585485866e2252L, 1.15637100417745116900985e2255L,
1.036108419742996247432826e2258L, 9.293892525094676339472446e2260L,
8.345915487535019352846257e2263L, 7.502978023293982398208785e2266L,
6.752680220964584158387906e2269L, 6.084164879089090326707503e2272L,
5.487916720938359474690168e2275L, 4.955588799007338605645222e2278L,
4.47985227430263409950328e2281L, 4.054266308243883860050469e2284L,
3.673165275268958777205725e2287L, 3.331560904668945610925592e2290L,
3.025057301439402614720438e2293L, 2.749777087008416976780878e2296L,
2.502297149177659448870599e2299L, 2.279592702900847757921116e2302L,
2.078988545045573155224058e2305L, 1.898116541626608290719565e2308L,
1.734878519046719977717682e2311L, 1.587413844927748779611679e2314L,
1.454071081953817882124298e2317L, 1.333383182151650997907981e2320L,
1.224045761215215616079527e2323L, 1.124898054556783151177085e2326L,
1.034906210192240499082918e2329L, 9.531486195870534996553677e2331L,
8.788030272592633266822491e2334L, 8.111351941603000505277159e2337L,
7.494889194041172466876095e2340L, 6.932772504488084531860388e2343L,
6.419747339155966276502719e2346L, 5.95110578339758073831802e2349L,
5.522626166992954925159123e2352L, 5.130519709136455125472825e2355L,
4.771383329496903266689728e2358L, 4.442157879761616941288136e2361L,
4.140091143937826989280543e2364L, 3.862705037293992580998747e2367L,
3.607766504832589070652829e2370L, 3.373261682018470781060395e2373L,
3.15737293436928865107253e2376L, 2.958458439504023466054961e2379L,
2.775034016254774011159553e2382L, 2.60575694126323279647882e2385L,
2.449411524787438828690091e2388L, 2.304896244824979937797376e2391L,
2.171212262625131101405128e2394L, 2.047453163655498628625036e2397L,
1.932795786490790705422034e2400L, 1.826492018233797216623822e2403L,
1.727861449249172166926136e2406L, 1.63628479243896604207905e2409L,
1.55119798323213980789094e2412L, 1.472086886087300677688502e2415L,
1.398482541782935643804077e2418L, 1.329956897235571797257677e2421L,
1.266118966168264350989308e2424L, 1.206611374758355926492811e2427L,
1.151107251519471553874142e2430L, 1.099307425201095333949805e2433L,
1.050937898492247139256014e2436L, 1.005747568857080512268005e2439L,
9.63506170965083130752749e2441L, 9.240024179555147223918863e2444L,
8.870423212372941334962109e2447L, 8.524476707090396622898586e2450L,
8.20054659222096155122844e2453L, 7.897126368308785973832988e2456L,
7.612829819049669678775e2459L, 7.346380775382931240017875e2462L,
7.096603829019911577857267e2465L, 6.862415902662254495787978e2468L,
6.642818593777062351922762e2471L, 6.436891217369973419013157e2474L,
6.243784480848874216442762e2477L, 6.062714730904256864165922e2480L,
5.892958718438937671969276e2483L, 5.733848833041086354826106e2486L,
5.584768763382018109600627e2489L, 5.445149544297467656860611e2492L,
5.314465955234328433095957e2495L, 5.19223323826393887913475e2498L,
5.078004107022132223793785e2501L, 4.971366020774667447094116e2504L,
4.871938700359174098152233e2507L, 4.779371865052349790287341e2510L,
4.693343171481407494062169e2513L, 4.613556337566223566663112e2516L,
4.539739436165163989596502e2519L, 4.471643344622686529752555e2522L,
4.409040337797968918336019e2525L, 4.351722813406595322397651e2528L,
4.299502139645716178528879e2531L, 4.252207616109613300565061e2534L,
4.20968553994851716755941e2537L, 4.171798370088980513051376e2540L,
4.138423983128268668946965e2543L, 4.109455015246370788264336e2546L,
4.08479828515489256353475e2549L, 4.064374293729118100717076e2552L,
4.048116796554201628314208e2555L, 4.035972446164539023429265e2558L,
4.027900501272209945382407e2561L, 4.023872600770937735437024e2564L,
4.023872600770937735437024e2567L, 4.027896473371708673172461e2570L,
4.035952266318452090518806e2573L, 4.048060123117407446790363e2576L,
4.064252363609877076577524e2579L, 4.084573625427926461960412e2582L,
4.109081067180494020732174e2585L, 4.137844634650757478877299e2588L,
4.170947391727963538708318e2591L, 4.208485918253515210556693e2594L,
4.25057077743605036266226e2597L, 4.297327055987846916651545e2600L,
4.348894980659701079651363e2603L, 4.405430615408277193686831e2606L,
4.467106644023993074398446e2609L, 4.534113243684352970514423e2612L,
4.606659055583302618042654e2615L, 4.684972259528218762549379e2618L,
4.769301760199726700275268e2621L, 4.859918493643521507580498e2624L,
4.957116863516391937732108e2627L, 5.061216317650236168424482e2630L,
5.172563076638541364129821e2633L, 5.291532027401227815504807e2636L,
5.418528796058857283076922e2639L, 5.553992015960328715153845e2642L,
5.698395808375297261747845e2645L, 5.852252495201430287815037e2648L,
6.016115565067070335873858e2651L, 6.1905829164540153756142e2654L,
6.376300403947635836882626e2657L, 6.573965716470012547825987e2660L,
6.784332619397052949356419e2663L, 7.00821559583715569668518e2666L,
7.246494926095618990372477e2669L, 7.500122248508965655035513e2672L,
7.770126649455288418616792e2675L, 8.057621335485134090105613e2678L,
8.363810946233569185529626e2681L, 8.689999573136678383765282e2684L,
9.037599556062145519115893e2687L, 9.408141137860693485399645e2690L,
9.80328306565084261178643e2693L, 1.022482423747382884409325e2697L,
1.067471650392267731323335e2700L, 1.115507874659919779232885e2703L,
1.166821236894276089077598e2706L, 1.221661835028307065264245e2709L,
1.280301603109665804396929e2712L, 1.343036381662039428812378e2715L,
1.410188200745141400252997e2718L, 1.4821077989831436116659e2721L,
1.559177404530267079472527e2724L, 1.64181380697037123468457e2727L,
1.730471752546771281357537e2730L, 1.825647698936843701832202e2733L,
1.927883970077306949134805e2736L, 2.037773356371713445235489e2739L,
2.155964211041272825059147e2742L, 2.283166099492707921737637e2745L,
2.420156065462270397041895e2748L, 2.567785585455468891261451e2751L,
2.726988291753707962519661e2754L, 2.898788554134191564158399e2757L,
3.084311021598779824264537e2760L, 3.284791238002700512841732e2763L,
3.501587459710878746689286e2766L, 3.736193819511507622717468e2769L,
3.990254999238290141062256e2772L, 4.265582594185732160795552e2775L,
4.564173375778733412051241e2778L, 4.888229685459023484306879e2781L,
5.240182222812073175176974e2784L, 5.622715525077354516964893e2787L,
6.038796473933078751220295e2790L, 6.491706209478059657561817e2793L,
6.985075881398392191536515e2796L, 7.522926724266068390284827e2799L,
8.109715008758821724727044e2802L, 8.75038249445076864098048e2805L,
9.450413094006830132258919e2808L, 1.021589655462138337297189e2812L,
1.105360007210033680955559e2815L, 1.19710488780846647647487e2818L,
1.297661698384377660498759e2821L, 1.407962942747049761641154e2824L,
1.529047755823296041142293e2827L, 1.662074910579922796721672e2830L,
1.808337502710956002833179e2833L, 1.969279540452231087085332e2836L,
2.146514699092931884923012e2839L, 2.341847536710388686451006e2842L,
2.557297510087744445604499e2845L, 2.795126178525904679045717e2848L,
3.057868039307339718876015e2851L, 3.348365503041536992169236e2854L,
3.669808591333524543417483e2857L, 4.025780024692876424128979e2860L,
4.420306467112778313693619e2863L, 4.857916807356943366749287e2866L,
5.343708488092637703424216e2869L, 5.883423045389994111470061e2872L,
6.483532196019773510840008e2875L, 7.151336012209810182456528e2878L,
7.895074957479630441432007e2881L, 8.724057828014991637782368e2884L,
9.648807957784580751387299e2887L, 1.068123040926753089178574e2891L,
1.18348032934684242280986e2894L, 1.312479685245648246896135e2897L,
1.45685245062266955405471e2900L, 1.618563072641785874554782e2903L,
1.799842136777665892504918e2906L, 2.003224298233542138357974e2909L,
2.231591868232165942130783e2912L, 2.488224933078865025475823e2915L,
2.776859025316013368431018e2918L, 3.101751531277986932537447e2921L,
3.467758211968789390576866e2924L, 3.880421439193075328055513e2927L,
4.346072011896244367422175e2930L, 4.871946725335689935880258e2933L,
5.466324225826644108057649e2936L, 6.13868210560332133334874e2939L,
6.899878686698133178683984e2942L, 7.762363522535399826019482e2945L,
8.740421326374860204097937e2948L, 9.850454834824467450018374e2951L,
1.111131305368199928362073e2955L, 1.25446724376069771912078e2958L,
1.417547985449588422606481e2961L, 1.60324677154348450596793e2964L,
1.814875345387224460755697e2967L, 2.056253766323725314036205e2970L,
2.331791771011104506117057e2973L, 2.646583660097603614442859e2976L,
3.006519037870877706007088e2979L, 3.418412146059187951730059e2982L,
3.890153022215355889068807e2985L, 4.430884292303290357649371e2988L,
5.051208093225751007720283e2991L, 5.763428434370581899808843e2994L,
6.581835272051204529581699e2997L, 7.523037715954526777311882e3000L,
8.606355147051978633244793e3003L, 9.854276643374515535065288e3006L,
1.129300103330719480318482e3010L, 1.295307218520335243925299e3013L,
1.487012686861344860026243e3016L, 1.708577577203685244170153e3019L,
1.964864213784238030795676e3022L, 2.261558710065657973445823e3025L,
2.605315633995637985409589e3028L, 3.003928925996970597177256e3031L,
3.466533980600504069142553e3034L, 4.003846747593582199859649e3037L,
4.628446840218181023037754e3040L, 5.355112994132435443654681e3043L,
6.201220847205360243752121e3046L, 7.187214961911012522508708e3049L,
8.337169355816774526110102e3052L, 9.679453622103275224813828e3055L,
1.124752510888400581123367e3059L, 1.308087170163209875846476e3062L,
1.522613466069976295485298e3065L, 1.773844687971522384240372e3068L,
2.068302906174795100024273e3071L, 2.413709491505985881728327e3074L,
2.819212686078991509858686e3077L, 3.295659630026341075024804e3080L,
3.855921767130819057779021e3083L, 4.515284389310189116659233e3086L,
5.291913304271541644724621e3089L, 6.207414305910518349261981e3092L,
7.287504395138948542033565e3095L, 8.562817664288264536889439e3098L,
1.006987357320299909538198e3102L, 1.185224119565992993526459e3105L,
1.396194012848739746374169e3108L, 1.646112741148664160975145e3111L,
1.942413034555423709950671e3114L, 2.293989793809955401451743e3117L,
2.71149593628336728451596e3120L, 3.20769969262322349758238e3123L,
3.797916436065896621137538e3126L, 4.500530976738087496047983e3129L,
5.337629738411371770312908e3132L, 6.335766499494298291361422e3135L,
7.526890601399226370137369e3138L, 8.949472925063680154093332e3141L,
1.064987278082577938337106e3145L, 1.268399848196350324559494e3148L,
1.511932619050049586874917e3151L, 1.803735614526709157141776e3154L,
2.15366032374489073362728e3157L, 2.5736240868751444266846e3160L,
3.078054407902672734314781e3163L, 3.684431126259499262974793e3166L,
4.413948489258880117043802e3169L, 5.292324238621397260335519e3172L,
6.350789086345676712402622e3175L, 7.627297692701157731595549e3178L,
9.16801182662679159337785e3181L, 1.102911822743203028683355e3185L,
1.32790583458281644653476e3188L, 1.600126530672293818074386e3191L,
1.929752595990786344597709e3194L, 2.329211383360879117929435e3197L,
2.813687351099941974458757e3200L, 3.401748007479829847120638e3203L,
4.116115089050594115015972e3206L, 4.984615372840269473284342e3209L,
6.041353831882406601620622e3212L, 7.328162198073359207765815e3215L,
8.896388908461058078227699e3218L, 1.080911252378018556504665e3222L,
1.314388082891670564709673e3225L, 1.599610296879163077251672e3228L,
1.948325341598820628092537e3231L, 2.375008591408962345644802e3234L,
2.897510481518934061686659e3237L, 3.53786029793461848931941e3240L,
4.323265284076103793948319e3243L, 5.287353442425074939998795e3246L,
6.471720613528291726558525e3249L, 7.927857751572157365034193e3252L,
9.71955360342746492953192e3255L, 1.192589227140549946853567e3259L,
1.46449957092859533473618e3262L, 1.799869972671243666390765e3265L,
2.213840066385629709660641e3268L, 2.725237121720710172592249e3271L,
3.357492133959914932633651e3274L, 4.139787801172575111937291e3277L,
5.108498146646957688130618e3280L, 6.308995211108992744841313e3283L,
7.797918080930715032623863e3286L, 9.646024666111294495355718e3289L,
1.194177853664578258525038e3293L, 1.479586360690412462312522e3296L,
1.834687087256111453267527e3299L, 2.276846675284834313505001e3302L,
2.827843570703764217373212e3305L, 3.515009558384778922194902e3308L,
4.372671890630664979210458e3311L, 5.44397650383517789911702e3314L,
6.783194723778631662299807e3317L, 8.45864382055195368288786e3320L,
1.055638748804883819624405e3324L, 1.318492797257299890710882e3327L,
1.648115996571624863388602e3330L, 2.061793111711102704099141e3333L,
2.581364975862300585532125e3336L, 3.234450314755462633671752e3339L,
4.056000694703350142624378e3342L, 5.090280871852704428993594e3345L,
6.393392775046996762815954e3348L, 8.036494718234074930859654e3351L,
1.010991035553846626302144e3355L, 1.2728377137622929025144e3358L,
1.603775519340489057168144e3361L, 2.022360929888356701089029e3364L,
2.552219493519106156774355e3367L, 3.223453220314631076006011e3370L,
4.074444870477693680071597e3373L, 5.154172761154282505290571e3376L,
6.525182715621321651697862e3379L, 8.267406500692214532701192e3382L,
1.048307144287772802746511e3386L, 1.330301766101183686685323e3389L,
1.68948324294850328209036e3392L, 2.147333201787547671536847e3395L,
2.73140783267376063819487e3398L, 3.477082170993697292422069e3401L,
4.429802685845970350545716e3404L, 5.647998424453612196945788e3407L,
7.206845989602809163302825e3410L, 9.203142328722787301537708e3413L,
1.176161589610772217136519e3417L, 1.504310673112177665717608e3420L,
1.925517661583587412118538e3423L, 2.466588124488575474923847e3426L,
3.162165975594353758852372e3429L, 4.057058946687555872607594e3432L,
5.20926368754682174042815e3435L, 6.693903838497665936450173e3438L,
8.608360336307998394274922e3441L, 1.107895975282839393343183e3445L,
1.426970016164297138626019e3448L, 1.839364350835779011688939e3451L,
2.372780012578154925078731e3454L, 3.063258996238398008276641e3457L,
3.957730623140010226693421e3460L, 5.117345695720033223114593e3463L,
6.621845330261722990710283e3466L, 8.575289702688931272969817e3469L,
1.111357545468485492976888e3473L, 1.441430736472625684391024e3476L,
1.870977095941468138339549e3479L, 2.430399247627967111703074e3482L,
3.159519021916357245213997e3485L, 4.11053424751318077602341e3488L,
5.35191559026216137038248e3491L, 6.973546014111596265608371e3494L,
9.093504002401521530353316e3497L, 1.186702272313398559711108e3501L,
1.549833167641298518982707e3504L, 2.025631950107177164310398e3507L,
2.649526590740187730918e3510L, 3.468230307278905739771662e3513L,
4.543381702535366519100877e3516L, 5.95637341202386550654125e3519L,
7.81476191657531154458212e3522L, 1.026078239646338405803632e3526L,
1.348266806895288665225973e3529L, 1.772970851067304594772154e3532L,
2.333229640004572846720155e3535L, 3.072863435886022439130444e3538L,
4.050034008497777574773926e3541L, 5.341994857208568621126808e3544L,
7.051433211515310579887387e3547L, 9.314943272411725276031238e3550L,
1.23143550061283008149133e3554L, 1.629189167310774197813029e3557L,
2.157046457519465037904451e3560L, 2.858086556213291175223397e3563L,
3.789822773538824098346224e3566L, 5.02909482048601957850544e3569L,
6.678637921605434000255224e3572L, 8.875909797813621786339193e3575L,
1.180496003109211697583113e3579L, 1.571240180138360769483123e3582L,
2.09289191994429654495152e3585L, 2.789824929285747294420376e3588L,
3.721626455667186890756781e3591L, 4.968371318315694499160303e3594L,
6.637744081269767850878165e3597L, 8.874663836657679616624106e3600L,
1.187430021344797532704305e3604L, 1.589968798580683896291065e3607L,
2.130558190098116421030027e3610L, 2.857078532921574120601266e3613L,
3.834199391180752469846899e3616L, 5.149329782355750567004386e3619L,
6.920699227486128762053895e3622L, 9.308340460968843184962488e3625L,
1.252902626046406292695951e3629L, 1.687659837284509276261446e3632L,
2.274965460659518504400429e3635L, 3.068928406429690462436179e3638L,
4.143053348680082124288841e3641L, 5.597265074066790949914225e3644L,
7.567502380138301364284032e3647L, 1.02388307203271217458763e3651L,
1.38633767953229228439165e3654L, 1.878487555766256045350686e3657L,
2.547229125619043197495531e3660L, 3.456589923465041619001435e3663L,
4.694049116065526518603949e3666L, 6.379212748733050538782766e3669L,
8.675729338276948732744562e3672L, 1.180766762939492722526535e3676L,
1.608204331123589088081141e3679L, 2.191982503321451927054595e3682L,
2.989864134530460428502467e3685L, 4.081164543634078484905867e3688L,
5.574870766604151210381415e3691L, 7.620848337947874704591394e3694L,
1.042532052631269259588103e3698L, 1.427226380052207616376113e3701L,
1.955300140671524434435274e3704L, 2.680716492860659999610761e3707L,
3.677943028204825519465964e3710L, 5.049815777725225438226769e3713L,
6.93844687859445975212358e3716L, 9.540364458067382159169923e3719L,
1.312754149430071785101781e3723L, 1.807662463765208848085153e3726L,
2.490958875068457792661341e3729L, 3.435032288719403296079989e3732L,
4.740344558432776548590385e3735L, 6.546415835195664413603321e3738L,
9.04714668424040821959979e3741L, 1.251220386430448456770651e3745L,
1.731689014819740664170581e3748L, 2.398389285525340819876255e3751L,
3.324167549738122376348489e3754L, 4.610620391486775735995354e3757L,
6.399541103383644721561551e3760L, 8.888962592599882518248995e3763L,
1.23556580037138367003661e3767L, 1.718672028316594685020925e3770L,
2.392391463416699801549128e3773L, 3.332601308539462823557935e3776L,
4.645646224104011176039761e3779L, 6.480676482625095590575466e3782L,
9.047024369744633444443351e3785L, 1.263869304453325292188736e3789L,
1.766889287625748758479853e3792L, 2.471878113388422513113315e3795L,
3.46062935874379151835864e3798L, 4.848341731600051917220455e3801L,
6.797375107703272787943078e3804L, 9.536717276107691721484139e3807L,
1.338955105565519917696373e3811L, 1.881231923319555484363404e3814L,
2.645012084187295011014946e3817L, 3.721532002451524080498029e3820L,
5.239917059451745905341225e3823L, 7.383043136767509980625786e3826L,
1.041009082284218907268236e3830L, 1.468863815103032878155481e3833L,
2.074035706925482423955539e3836L, 2.930612453885706665049177e3839L,
4.143886009794389224379536e3842L, 5.863598703859060752497043e3845L,
8.302855764664430025535813e3848L, 1.176514661852949734618425e3852L,
1.668297790507482723688926e3855L, 2.367314564730117984914586e3858L,
3.361586681916767538578712e3861L, 4.77681467500372667232035e3864L,
6.792630467855299328039538e3867L, 9.665913155758090943800263e3870L,
1.376426033379952150397157e3874L, 1.961407097566431814315949e3877L,
2.796966521129731767214544e3880L, 3.991271225652127231815154e3883L,
5.69953531023123768703204e3886L, 8.144635958320438654768785e3889L,
1.164682942039822727631936e3893L, 1.666661290058986323241301e3896L,
2.386658967364468414881543e3899L, 3.420082300233283238525251e3902L,
4.90439801853452816404521e3905L, 7.037811156597047915404876e3908L,
1.01062968208733608065214e3912L, 1.452274853159501947897125e3915L,
2.088371238843363801076066e3918L, 3.005166212695600509748459e3921L,
4.327439346281664734037782e3924L, 6.235840097991878881748443e3927L,
8.992081421304289347481255e3930L, 1.297557349094208952841545e3934L,
1.873672812092037727903191e3937L, 2.707457213472994516820111e3940L,
3.914983130681950071321881e3943L, 5.664980590096781753202762e3946L,
8.202891894460139978637599e3949L, 1.188599035507274282904588e3953L,
1.723468601485547710211653e3956L, 2.500752940755529727517108e3959L,
3.631093269977029164354841e3962L, 5.275978521276623375807584e3965L,
7.671272769936210388424227e3968L, 1.116170188025718611515725e3972L,
1.625143793765446298366896e3975L, 2.367834507516255256720567e3978L,
3.452302711958700164298587e3981L, 5.036909656747743539711638e3984L,
7.353888098851705567978991e3987L, 1.074403051242234183481731e3991L,
1.57077726091614637625029e3994L, 2.298047132720322148454174e3997L,
3.364341002302551625336911e4000L, 4.928759568373238131118575e4003L,
7.225561527235167100219831e4006L, 1.059989876045399013602249e4010L,
1.556065138034645751968102e4013L, 2.285859687772894609641142e4016L,
3.360213741026155076172478e4019L, 4.942874413049474117049716e4022L,
7.275911136008825900297181e4025L, 1.071741710334100055113775e4029L,
1.579747281032463481237704e4032L, 2.330127239522883634825613e4035L,
3.439267805535776245002606e4038L, 5.079798548776341513868848e4041L,
7.507942255091432757498158e4044L, 1.110424659528022904833978e4048L,
1.643428496101473899154287e4051L, 2.433917602726282844647499e4054L,
3.607065887240351175767593e4057L, 5.349278710777440793663341e4060L,
7.938329606793722137796397e4063L, 1.178841946608867737462765e4067L,
1.751759132660777457869669e4070L, 2.604865830266576079852198e4073L,
3.87604035543666520682007e4076L, 5.771424089245194492955084e4079L,
8.599421892975339794503075e4082L, 1.282173804242623163360409e4086L,
1.91300331592999375973373e4089L, 2.856113950683480683282458e4092L,
4.267034242321120140823993e4095L, 6.379216192270074610531869e4098L,
9.543307423636031617355676e4101L, 1.428633121318313933118145e4105L,
2.140092415734834271810981e4108L, 3.20799853118651657344466e4111L,
4.81199779677977486016699e4114L, 7.222808692966442065110652e4117L,
1.08486586568355959817962e4121L, 1.630553396122390076063969e4124L,
2.452352307768074674400209e4127L, 3.690790223190952384972315e4130L,
5.558330076125574291768306e4133L, 8.376403424721240457694837e4136L,
1.263161636447963061020381e4140L, 1.906110909399976259079756e4143L,
2.878227473193964151210431e4146L, 4.349001711996079832478961e4149L,
6.575690588538072706708189e4152L, 9.94901986045810400524949e4155L,
1.506281606873356946394773e4159L, 2.282016634413135773788081e4162L,
3.45953721777031383306273e4165L, 5.248117959357566084756162e4168L,
7.966643062304785316659854e4171L, 1.210133081164096889600632e4175L,
1.83940228336942727219296e4178L, 2.797730873004898881005493e4181L,
4.25814638871345609689036e4184L, 6.485156950010593635564018e4187L,
9.883379191816144700599564e4190L, 1.507215326751962066841433e4194L,
2.300010588623494114000027e4197L, 3.512116168828075512078042e4200L,
5.366513505969299382455248e4203L, 8.205399150627058755774074e4206L,
1.255426070045939989633433e4210L, 1.922057313240334124128787e4213L,
2.944591803884191878165301e4216L, 4.514059235354466149227406e4219L,
6.924566867033751072914841e4222L, 1.062921014089680789692428e4226L,
1.63264667764174969296757e4229L, 2.509377943535369278091155e4232L,
3.859423277157397949704196e4235L, 5.939652423545235444594757e4238L,
9.147064732259662584675926e4241L, 1.40956267524121400429856e4245L,
2.17354564522195199462838e4248L, 3.35378093057747192771159e4251L,
5.178237756811616656386695e4254L, 8.000377334273947734117444e4257L,
1.236858335878752319694557e4261L, 1.913419845604429838567479e4264L,
2.961973920995657390102458e4267L, 4.588097603622273297268708e4270L,
7.111551285614523610766497e4273L, 1.103001604398812612029884e4277L,
1.711858490026957173870379e4280L, 2.658516235011864491020699e4283L,
4.131334229208437419046167e4286L, 6.424224726419120186616789e4289L,
9.996093674308151010375724e4292L, 1.5563917850897791123155e4296L,
2.424858401169875856987549e4299L, 3.780354247423836461043589e4302L,
5.897352625981184879227999e4305L, 9.205767449156629596474907e4308L,
1.43794087555826554296938e4312L, 2.247501588497569043661142e4315L,
3.515092484410197984286026e4318L, 5.50111973810195984540763e4321L,
8.614753509867669117908349e4324L, 1.349931874996263750776238e4328L,
2.116693179994141561217142e4331L, 3.321091599410808109549695e4334L,
5.214113811074968731993021e4337L, 8.191372797198775877961037e4340L,
1.287683803719647568015475e4344L, 2.025526623251005624488342e4347L,
3.18817890499708285294465e4350L, 5.021381775370405493387824e4353L,
7.913697677983759057579211e4356L, 1.247990123818038803380242e4360L,
1.969328415384865231734021e4363L, 3.10956956789270220090802e4366L,
4.913119917270469477434671e4369L, 7.767642589204612243824215e4372L,
1.228841057612169656972991e4376L, 1.945255394200064566988244e4379L,
3.081284544412902274109379e4382L, 4.883836002894450104463366e4385L,
7.745763900590597865678898e4388L, 1.229252731023727881283241e4392L,
1.952053336865679875477787e4395L, 3.101812752279565322134204e4398L,
4.931882276124508862193384e4401L, 7.846624701314093599749673e4404L,
1.249182652449203701080148e4408L, 1.989947965351581495820676e4411L,
3.171977056770420904338157e4414L, 5.059303405548821342419361e4417L,
8.0746482352559188625013e4420L, 1.289521323170370242341458e4424L,
2.060655074426251647261649e4427L, 3.294987464007576383971377e4430L,
5.271979942412122214354203e4433L, 8.440439887801807665181079e4436L,
1.352158470025849587962009e4440L, 2.1675100274514368895031e4443L,
3.476686084032104770762973e4446L, 5.580081164871528157074571e4449L,
8.961610350783674220261762e4452L, 1.440130783370936447196065e4456L,
2.315730299660465807091273e4459L, 3.726010052153689483609858e4462L,
5.998876183967440068611871e4465L, 9.664189532371545950533724e4468L,
1.557867352618293207226036e4472L, 2.512840039773306943255597e4475L,
4.055723824194117406414533e4478L, 6.549993976073499611359471e4481L,
1.05847902653347753719569e4485L, 1.711560585904633177645431e4488L,
2.769305027993696481430308e4491L, 4.483504840321794603435669e4494L,
7.263277841321307257565784e4497L, 1.177377338078183906451414e4501L,
1.909706042362814296264193e4504L, 3.099452906754847602836785e4507L,
5.033511520569872507006939e4510L, 8.179456220926042823886275e4513L,
1.329979581522574563163908e4517L, 2.163876779137228814267679e4520L,
3.522791396435408509627781e4523L, 5.738627184793280462183656e4526L,
9.353962311213047153359359e4529L, 1.525631252958847990712911e4533L,
2.489830204828839920843471e4536L, 4.065892724485495590737389e4539L,
6.643668711809299795264893e4542L, 1.08623983438082051652581e4546L,
1.777088369047022365036225e4549L, 2.909093660129975611564301e4552L,
4.765095415292900051742325e4555L, 7.80999138566506318480567e4558L,
1.28083858724907036230813e4562L, 2.101856121675724464547641e4565L,
3.451247751791539570787227e4568L, 5.670400056193499514803413e4571L,
9.322137692382113202336812e4574L, 1.533491650396857621784406e4578L,
2.524127256553227645457131e4581L, 4.157237591543165932067896e4584L,
6.851127550863137456047892e4587L, 1.129750933137331366502297e4591L,
1.864089039676596754728791e4594L, 3.077611004506061242057233e4597L,
5.08421337944401317187855e4600L, 8.404204716220953773115242e4603L,
1.390055460062945754073261e4607L, 2.300541786404175222991247e4610L,
3.809697198285314169273505e4613L, 6.312668257558765578486198e4616L,
1.046640397103243332913012e4620L, 1.736376418794280689302686e4623L,
2.882384855198505944242459e4626L, 4.787641244484718373386725e4629L,
7.957059748333601936568737e4632L, 1.323259036147878002051381e4636L,
2.201903036150068995413498e4639L, 3.666168555189864877363474e4642L,
6.107836812946314885687548e4645L, 1.018176396718150691444114e4649L,
1.698318229725875353328782e4652L, 2.834493125412485964705738e4655L,
4.733603519438851561058582e4658L, 7.909851480982320958528891e4661L,
1.322527167620244064266031e4665L, 2.212587951428668319517069e4668L,
3.703872230691590766871574e4671L, 6.203985986408414534509886e4674L,
1.039788051322050275983857e4678L, 1.743724562067078312824928e4681L,
2.925969815148557408920229e4684L, 4.912703319634427889577065e4687L,
8.253341576985838854489469e4690L, 1.38738671909131951143968e4694L,
2.333584461511599418241541e4697L, 3.927422648724021820900514e4700L,
6.613779740451252746396466e4703L, 1.114421886266036087767804e4707L,
1.878915300244536843976518e4710L, 3.169730111512533655788386e4713L,
5.350504428233156810970796e4716L, 9.037001979285801853729675e4719L,
1.527253334499300513280315e4723L, 2.582585388638317167957013e4726L,
4.369734477576032648183266e4729L, 7.397960470536223273374269e4732L,
1.253214503708836222509601e4736L, 2.124198583786477397153774e4739L,
3.602640798101865665572801e4742L, 6.113681434378866034477043e4745L,
1.038103107557531452654202e4749L, 1.763737179740245938059489e4752L,
2.998353205558418094701131e4755L, 5.100198802654869179086624e4758L,
8.680538362118587342805434e4761L, 1.478295683068795424479765e4765L,
2.51901584394922740331352e4768L, 4.294922013933432722649552e4771L,
7.327136955770436224840136e4774L, 1.250742278350013463580211e4778L,
2.136267811421822995795001e4781L, 3.650881689719895499813656e4784L,
6.243007689421021304681352e4787L, 1.068178615659936745230979e4791L,
1.828721790009811707835437e4794L, 3.132600426286807455522103e4797L,
5.369277130655587978764885e4800L, 9.208310279074333383581777e4803L,
1.580146043889155608622633e4807L, 2.713110757357680180005061e4810L,
4.661124281140494549248694e4813L, 8.012472639280510130158506e4816L,
1.378145293956247742387263e4820L, 2.37178805089870236464848e4823L,
4.084219023647565471924682e4826L, 7.037109377744755308126227e4829L,
1.213197656723195815120961e4833L, 2.092765957847512781083659e4836L,
3.612114043244807060150395e4839L, 6.238120952683781792879732e4842L,
1.077947300623757493809618e4846L, 1.863770882778476706796829e4849L,
3.224323627206764702758514e4852L, 5.581304198694909700474988e4855L,
9.666818872139583601222679e4858L, 1.67525971054178983809189e4862L,
2.904900338079463579251338e4865L, 5.040002086567869310001071e4868L,
8.749443622281821122161859e4871L, 1.519778357190352328919515e4875L,
2.641374784796832347662117e4878L, 4.593350750761691452584421e4881L,
7.992430306325343127496893e4884L, 1.391482116331242238497209e4888L,
2.423961846649023979462138e4891L, 4.224965498709248796202507e4894L,
7.368339829748929900577172e4897L, 1.285775300291188267650716e4901L,
2.244963674308414715318151e4904L, 3.92195153901680050766081e4907L,
6.855571290201367287391096e4910L, 1.199039418656219138564703e4914L,
2.09831898264838349248823e4917L, 3.67415653861731949534689e4920L,
6.437122255657543755847751e4923L, 1.128427531416767420400111e4927L,
1.979261890105010055381794e4930L
};
if (n >= nentries) throw std::overflow_error(
"In npstat::ldfactorial: result is too large");
return table[n];
}
long double logfactorial(const unsigned long n)
{
if (n > MAX_LD_FACTORIAL_ARG)
{
const long double lnn = logl(n);
const long double x = 1.0L/n;
const long double x2 = x*x;
const long double x4 = x2*x2;
const long double x6 = x4*x2;
const long double x8 = x4*x4;
long double sum = 1.0L/12*x*(x8/99 - x6/140 + x4/105 - x2/30 + 1);
sum += LOGTWOPIOVERTWO;
sum += lnn/2;
sum += n*(lnn - 1);
return sum;
}
else
return logl(ldfactorial(n));
}
}

File Metadata

Mime Type
text/x-c
Expires
Tue, Sep 30, 6:10 AM (1 d, 9 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
6558553
Default Alt Text
permutation.cc (74 KB)

Event Timeline