number-theory 0.0.22

Fast primality, factorization and elementary number theory for integer types
Documentation
/*

  Look-up tables to optimize number-theorectic functions

*/
// Bitwise Look-up table for integers under 2^16, Mobius function is treated as an extension of the Liouville function so this is used for both
#[rustfmt::skip]
 pub(crate)  const LIOUVILLE_LUT : [u64;1024] = [
 
 	  0xa835be21f89e39ae ,  0xb1377aee1209dbdc ,  0xd479fdbc26b80e0d ,  0x987ed2e8c01981ab , // 0
	  0x73c910357fabf5a6 ,  0x8c67c8b62a863825 ,   0xddff6bc1776b13a ,  0x3c9d4889ac5ba397 , // 256
	  0xca8a3938284c1b41 ,  0xe0d80fb6fedf5846 ,  0x71191d6b52bf79ee ,  0x17a5c9e825b598e3 , // 512
	  0x7ce04a63385c52b3 ,  0x5dae2608aa61b087 ,  0x330f669ab1d8bcc2 ,  0xfaa73624cdb71f9c , // 768
	  0xf91d67a57e30c7d6 ,  0x85911fb97236d2bd ,  0x2203060aecbd4d43 ,  0xa1570c1f75aab0e3 , // 1024
	  0x64d9ba80e8b68b0b ,  0xc0d454367486c310 ,  0xd9ccb8ec9e3da972 ,  0x7c6899c68dbeab9d , // 1280
	  0xf81decadc4f3bad8 ,  0xca25217d6d39ebf2 ,  0x1b91635eb0553d68 ,  0xec86b981db69f737 , // 1536
	  0x90d40697902d2751 ,  0x525a7d02e1ebbcb9 ,   0xda43048fc003c05 ,   0x8b939c2facbf34d , // 1792
	  0xe80b7aff8d6aa6e1 ,   0x21e5684ebca1346 ,  0xea537069ac731a0c ,  0xbfe696567e28989c , // 2048
	  0xa12dbaae650447f0 ,  0xd3f35f70f769ff39 ,  0x60643b1b1a5da3f0 ,  0x3bfccc4aff05d680 , // 2304
	  0x2337906b9718d530 ,  0xe9ed8e9e10b1bf57 ,  0xe06f1f61afd8de77 ,   0x55face5c647f84b , // 2560
	  0xb603722e9936627b ,   0xe14a5ad3297898d ,  0x17a432091b983e06 ,  0x482dc3173614ad4b , // 2816
	   0x76f88f210138e95 ,    0x9d7e8ea9251326 ,  0x4b2c7834a13a2a5b ,   0xf93d9ee535c488c , // 3072
	  0xb0556ccef80ec1bf ,  0x5eb21e56c378e489 ,  0x2cb8699c28e8fae2 ,  0xa32db5e3183cbfd4 , // 3328
	  0x3c77d1aef3e066d6 ,  0x34f70e677fc11ec0 ,  0x8bf6a192382fb894 ,  0x4e53ecb1ca2675d9 , // 3584
	   0x287d7f5d0a7fdc4 ,  0xf50c9bcd5a7def9f ,  0x283bad9a8878450c ,  0xff379a9e523e8759 , // 3840
	  0xbf2c4b33b943895c ,   0xb9f7f90c21ba082 ,   0x93a8539fc7a47e1 ,  0x7f5b54a944c13767 , // 4096
	  0x138d68d0d4b95f2d ,  0x2913c658e257c1bc ,  0xc801fbb71e95bc0f ,  0x38208be114eb44e9 , // 4352
	  0x63c65f4de540a0dd ,  0x3b5e590c92bb1983 ,  0x8a68c9b4808ad214 ,  0x24580050c68262f7 , // 4608
	  0x7eb364acb350a8f7 ,  0xc9d5e3e772baf63a ,  0x8a88fd44aceb1ddf ,  0xf238a8058f274d39 , // 4864
	  0x3cc8d4978e4cf057 ,  0x59fad842967d6332 ,  0x7cd79a7e9a806460 ,   0x334098cb7a11c01 , // 5120
	  0x3188ae37a4abca68 ,  0xa1ddcba0dc826b7e ,   0xdebcd428a9fe59a ,  0x55e444201b8521ee , // 5376
	  0xbebeda634b7bca90 ,  0x30e3f7f0e0f1f321 ,  0xfa79b6689fbc970c ,  0xffa1fcef1b6c992e , // 5632
	  0x76981c9d5209f743 ,  0xdcc0194f70f1d53e ,  0xda49f6e5992c6710 ,  0xe7bd7b06057afe48 , // 5888
	  0x7cf55452350916ec ,  0xf7c269801db5aaf9 ,  0x931c79eefc70f169 ,  0xf5f53ca6e2ab9783 , // 6144
	  0x315ed2195b396610 ,  0x67925125c817f2e7 ,  0x4672eead47bd950f ,  0x7da834580c148ba1 , // 6400
	  0x8a35f5aba7d6322a ,  0x38dd4ecc4b07a5ab ,  0x2772ea95a94d17b6 ,  0xcc0990597ea1ceeb , // 6656
	  0xdbbfa9bf00932bf9 ,  0xd10f38b563369ea7 ,  0xd41778ad300a864d ,  0x19d8d10c12e60178 , // 6912
	  0x20782bfd436b0661 ,  0x50af40480e74b9a1 ,  0xc0aa077e76012f7f ,  0x526d80c277a14360 , // 7168
	  0xf237792a1a1d3665 ,  0xbf3a82cb31de9e5b ,   0xdb9d1e3ca64a6b6 ,  0x6f294652298d10f4 , // 7424
	  0xa47d99e20aac2fef ,  0x7d73354284c2a264 ,  0x6c1360ae03229682 ,  0x2aecd50d3430afa6 , // 7680
	  0x171dc0356dceff87 ,  0x59355a90310e9e91 ,  0xec7bd8a937e24634 ,  0x80aa5aea1c191401 , // 7936
	  0x903eeff03d96648d ,  0xb282d32dcd3af0d0 ,  0x2f537e1a11d71779 ,  0xfdbabea8c0201e7d , // 8192
	   0x2256013656821d6 ,  0xf73c58119fe4da3e ,  0x4d6f8576d2e0e362 ,  0xeaa2c6b8ecc5919e , // 8448
	   0xe4f183e6e2ad30c ,  0xfef895acc33f8c5f ,  0xa1d96468a576b2a7 ,  0xf1b4f47a2dc1c617 , // 8704
	  0x74ab96ce1a0dff2a ,  0xa71d5d7c0a3a9860 ,  0xd66fa390656781bc ,  0xf2bdd9ff35b803f6 , // 8960
	  0xa36647dd33d58e2c ,  0xeb582fc1e4826d2e ,  0x3ef390327c9695f0 ,  0x5abae48be6b47fa5 , // 9216
	  0x35579d918e597cef ,  0x3d9be995859cba6d ,  0x25633d59e3f9a062 ,  0x7bed661fd777ec75 , // 9472
	  0xbaf846f511bdaa60 ,  0xc829baf0ebcdb90d ,  0xc8db3013a8e3d03b ,  0x25bc844ca3700be8 , // 9728
	  0x99a503927e840400 ,  0x9f99bd95802c6d6d ,  0x172adbe0ef2cf014 ,   0x85bd01f3997d56e , // 9984
	  0xb5a3cf0788dfe4e8 ,  0x70ad059f2e4736e0 ,  0x3c494004c1da5273 ,  0x4c94a839ae354dd3 , // 10240
	  0xb4311d5f614f6b7d ,  0x68ad8668b611ca89 ,  0x98401bd67c85ddfe ,  0x575af26d55bc952f , // 10496
	  0x134db93a259bc397 ,  0xd85e3db5912bd240 ,  0x2e259d7963904aab ,  0xbb5e2c8ca510bb7f , // 10752
	  0xb5bb16a0a34c1411 ,  0xfd0eab1007a4edf9 ,  0x7490176c5bdca30b ,  0x6e4cabc567657975 , // 11008
	  0x4fb8c01a07b19657 ,  0x1281b2030e91c95a ,  0x89dd22de82d8d1fe ,  0xf0d5a37a8a428855 , // 11264
	  0x1e801025bcc0d7ad ,  0x201b4a3e92e36b1f ,  0xf4ba4387be145383 ,    0xa81354820d81a2 , // 11520
	  0xe6d9f5beaac865fa ,  0xc24b9c3dfc8d16a4 ,  0x40dfa0fe2ceed029 ,   0xc0d8df5d49c6faa , // 11776
	  0xb6145ba741425e7d ,  0x2433c59602e3a96e ,  0x75ccc8312083e5bf ,   0x36832ae6a32d5c9 , // 12032
	  0xdae65f9c5c63a90f ,  0xe2270ac4ce654c79 ,  0xde0c92ec313b28b4 ,  0xa8c28573cb96bff5 , // 12288
	   0x20fe2df82f643be ,  0xb6d87687e0142b29 ,  0x21f3b3929642375a ,  0x88e4204c582539e9 , // 12544
	  0x6eb07a3c61e1d6ff ,  0xdafcee2b26f15616 ,   0xd9d7cc8a2dba9c0 ,  0xe348b673c4d6fbce , // 12800
	  0x4d68b8ac14ec5588 ,  0xef49cad98b839986 ,  0x7fa7744f9538317c ,  0xe2061997f84f4c9f , // 13056
	  0x11e8a4cb5a5bd333 ,  0x37117a6ea2e411b2 ,  0xcf1ad76839e69992 ,  0xd0970e0665a90707 , // 13312
	  0x199ced26f6c89261 ,  0x79c2eaf3091b144e ,  0xe08133deafaba91a ,  0x2505fdbc36fd469c , // 13568
	  0xdfff9e5ad91280bc ,  0x2432b82a131eb8a2 ,  0x6b5af041b601b9c0 ,   0xcd677a8781fba44 , // 13824
	  0xd8f5d5191dc3458e ,  0xa46d5462e015bbac ,  0xd4510bcb55f6e21d ,  0xde9e0e1d86f6df0d , // 14080
	  0x45f841b255694bf4 ,  0xf357e837d3982aa6 ,  0x5da1c2cf9296915e ,  0xe457392aedfdefb7 , // 14336
	  0xe269d77c79806202 ,  0x2f5f19195d4a62a3 ,  0xe86891de4f72eb5f ,  0x4cd3cb2e35f72d51 , // 14592
	  0xd6135ea4f86b614c ,  0x82f178c8ca9ed91b ,  0x58f626a11c03c490 ,  0x3828fa3b1f792d1a , // 14848
	   0x799634f996b1249 ,  0x5f06b894ae7c21fa ,  0x5bbeb7aeded502ef ,  0xc922733e6deb4c79 , // 15104
	  0xd5399307dba2a3a2 ,  0x394fcaa69c9c837b ,  0xb565addb99db43e7 ,  0x408e607af06667d1 , // 15360
	  0xddfaf3d39ecb357b ,  0xebaddc5841559989 ,  0xfaedf857b9a21b6b ,  0x5339098704c4d706 , // 15616
	  0x612c8f09a20297e0 ,  0x5eca7cac2df7d24e ,  0xfa54d52b9e0314d6 ,  0xe49ed0e64e993efd , // 15872
	  0x78c083f1c56178ed ,  0x23a54ab08e1f391e ,  0xfc07fc16d44f5d74 ,  0xb7573b11663b2131 , // 16128
	  0xd00e1e6b49e59f06 ,  0x94577883a98a00fd ,  0xa586523b2857acd7 ,  0x1af39f518cd05386 , // 16384
	  0xfcfcac4254624a9c ,  0xfb886e724a015413 ,  0xaffd7bdd74894004 ,  0xaaae9891120b3997 , // 16640
	  0x41c4c3bdf35c8ee9 ,  0x75f97b466bfd54f8 ,  0x162821452cb352a9 ,   0x2cad00fe43f7efc , // 16896
	  0x86d90bff815ac9d9 ,  0x6d064b0017c4c843 ,  0x212f87e6147ebc09 ,  0xa33339fb05e1929d , // 17152
	  0xcb0953392cd8df07 ,  0x5529cda87e3f78a1 ,  0xadd078223d85e42a ,   0xa0102173ecc9325 , // 17408
	  0xb1ce4843107b9360 ,  0xb9d4841ee9ef433f ,  0x7926a55c85c9f4e0 ,  0x22fc90cf0a6d4091 , // 17664
	  0xfebbdda4222adb9b ,  0xcac5b910be692da9 ,  0x751b721b363debdf ,  0x9342562eccaceaa5 , // 17920
	  0xcbe4e368b5de9027 ,  0x2443c120b37abc7f ,  0xd26692b5f7f20aeb ,   0x873b00e2c3c2a08 , // 18176
	  0xf8da2ce63709598f ,  0x3b70ebc16f620ca4 ,  0x23453f534b8cf9a3 ,  0x2b98c4355100255c , // 18432
	  0x6a85be49bec4285d ,  0xd00b22d896f5f071 ,   0x36b184748a0116c ,  0x6c9130b38b4d1db0 , // 18688
	  0x17ab443ce00da908 ,  0x7066cce234869676 ,  0xbf4616051213e386 ,  0x5806bc100b3c366c , // 18944
	  0x295a2036b37debfb ,  0xf1e6e178f284463c ,  0xac6ae8688107c0e6 ,  0xe292032ee3c95e22 , // 19200
	  0x5e7e3a8e19b1ebff ,  0xb23b0097c7e128c6 ,   0x11805861a3cf584 ,  0x279f59be38b3a057 , // 19456
	  0x31bf83f20e55da30 ,  0x871d0eb0725f765a ,  0x19fae07f7fb0293f ,  0x7b4c380715edef07 , // 19712
	  0xe2a13f4777ef7d75 ,  0x1e1c11e4d55ab653 ,  0x1dfdd1276bae4926 ,  0x9ea0961e1a8634e6 , // 19968
	  0x810af12d2ad556e7 ,  0x7e6879998c1a23f5 ,  0xd89cb6ea864643a3 ,  0xf515e6188e5ddc20 , // 20224
	  0xbd3f26a82be5013d ,  0x32ce1bd0850855e2 ,  0x59a3c54af069015d ,  0x48fdbb2ed56c1eaa , // 20480
	  0x8774243944db68d8 ,  0x5a87659467d7dfc7 ,  0x138972ce45868658 ,  0x47a594ed919f5ab6 , // 20736
	  0x4b544f88eb3a42a4 ,  0x98ef7a7ed4046e28 ,  0x98c35cf625b99d3e ,  0xe91d392e3d4bebbf , // 20992
	  0x48af1d6ca6242001 ,  0x3e15e5df7cb22ceb ,  0x6e66980db6eed18a ,  0xeee8ce1988d9c186 , // 21248
	  0x79e4369a87fa3ec8 ,  0x54526daebabe52bb ,  0x365edb322cdbe775 ,  0x2ebd4e01da0e1a6c , // 21504
	  0x6b709cdfed9131b0 ,  0x7383d9cc3c26e89e ,  0x93cefe7530b260a2 ,  0x303a6c81f3273725 , // 21760
	  0x9bdacf8d5ce5fef6 ,  0x1aeeb892f4e13b7d ,  0x5d4ab345a906a21e ,  0xa28e55a911b854df , // 22016
	  0xc41a240f91f85fba ,  0x6ae53c57fcc8e3a5 ,  0x416ae36e42146244 ,  0xc121c7a5913a8564 , // 22272
	  0xf540b8d63c63ec48 ,  0xcf28b0b52d75d493 ,  0x772b1e5ea59e6631 ,  0xfed33f5498f957f2 , // 22528
	  0xb7d18c170cdc088b ,  0x9d3ca4ae79d32ea9 ,  0xb5bbc753bf354ec4 ,  0xa87d266e397a6093 , // 22784
	  0x188da755a6ca3926 ,  0xfe8b17d5fcf571c4 ,  0x1e5b0b7a613854a8 ,  0xfbd5de3245395209 , // 23040
	  0xba21dee5c6d2bf52 ,  0x224538b14f50bf42 ,  0x1753d58e15dc9bd3 ,  0x7f5f193574f246ed , // 23296
	  0x33198f37eb44aa3b ,  0x2be9843480ce3aa3 ,  0xa8a5958c7643bbe7 ,  0xa751671a348f52ae , // 23552
	  0xf187892126dffbb4 ,  0x6f7526aab975aa83 ,  0x26ef362dc1a81993 ,  0xfd875da4358ea2ce , // 23808
	  0x4756effbee0beaa4 ,  0x3ae9de6546ba33e0 ,  0x5ff1a9f291bc6b29 ,  0x79c558d8274e1641 , // 24064
	  0x597dbdf001469280 ,  0xc8cc27afafb5d2fc ,  0x611b5073a6e40dbc ,  0xddd2499d70f1b3a1 , // 24320
	  0xce85e15a1916d588 ,   0x6990be9e4281c85 ,  0x8d83696c65054034 ,   0x973d342df11a7cf , // 24576
	  0xf2747018db9d9a65 ,   0x60bf505bef10b87 ,  0x873034c332aa28cc ,  0xb137a5533dc66ad2 , // 24832
	  0x3f5180ebe7f03201 ,  0x57fb77a0a17b2c0a ,  0x21577c6dd9b27b3c ,  0x9841ae1d68e11560 , // 25088
	  0x1c49e553f8c0ee33 ,  0xfbf6a2f2b0529c7b ,  0x6ebff164523ca11e ,  0x373d8bcd537f45a7 , // 25344
	  0x4bf4abde8ee9820a ,  0x432b12f56039f2ad ,  0x73e9885ec66b7661 ,   0xeb3020709837392 , // 25600
	  0xbbd18e3239160fd7 ,  0xf78e148ee88dad15 ,  0x874d246b0838af81 ,  0x8b58c51d12c348f2 , // 25856
	  0x5c4783876466b59f ,  0x6d2e41173a3531a7 ,  0x37b0357a9cb4bfe9 ,   0x1224fbc8d33ac34 , // 26112
	  0xbcc6589dd2de602d ,  0xc200b14a484f45aa ,  0x2a15cf2265073622 ,   0x97b756bd616bc62 , // 26368
	  0xce336c9284fa7a5a ,  0xd65e0bbfb3e5afb0 ,  0xbb7b0967f654b8d1 ,  0xda42fcd6429b4123 , // 26624
	  0xd81c8b4914b43cf3 ,  0x2702dcb124c0c3bf ,  0xe96e999c55c057ea ,   0x4f514e8dd295f6b , // 26880
	  0x28e12d9d34d143f4 ,  0x5c3e16ad810c79c1 ,  0x77165e9afc4f6da9 ,  0x401c87fb211b0a72 , // 27136
	  0x13a231ba1116d633 ,   0x1fd35d6f2d00e03 ,  0xfac12084ef6b1e87 ,  0xd946d746080c908d , // 27392
	  0xa63eded917f7102d ,  0x248a80aabe23e41b ,  0xdc5ad62b3a97b1db ,  0xf3e57a5138b57991 , // 27648
	  0x9243dffe9836addd ,  0xc918c433a85fed54 ,  0xc2b75caa9a99676f ,  0x5da706c16840b91f , // 27904
	  0xfe0c075247e49dab ,   0xebf204c064476be ,  0xa955d444983ab307 ,  0x3bcd438e4c45415b , // 28160
	  0xe44ca2418bd37c04 ,  0xaec5c6fe5598a538 ,  0xbd63a86bae20d5ac ,  0xa4ab962957a97cae , // 28416
	  0xce4ee39cc7928ac5 ,  0x6f64089dedd69851 ,   0xcf89c3f5bbb33e1 ,  0x8af0e46a0137d0ca , // 28672
	  0x3c5b1c6316f66421 ,  0x4e24135caff30f08 ,   0x124a00481aa10ea ,  0xa965e64a583e7b1b , // 28928
	  0x483e957543fb77fb ,  0xa1d3439eacea480d ,  0xc42cc5996979b9d2 ,  0xf128cc085eb4fc9c , // 29184
	  0x65884a5b0310e608 ,  0x8b9d4b371cfc0401 ,  0x7a4408e2d92e64f6 ,  0x4d2d8ef28d107b03 , // 29440
	  0x8a95e992c974e707 ,   0xec97cd8e48111cf ,  0x2fb3bc898c367632 ,  0x3f5308d6681d0597 , // 29696
	  0xfe2d7df28d6dbedf ,  0x46978a41f1613354 ,  0x5ea04a9e738efeb3 ,  0x78bdf9352a3b5838 , // 29952
	  0xbc1cebba56f3cf3c ,  0x5de8b61cc1f84520 ,  0x11ab400fd97caa39 ,  0x460257499a15146f , // 30208
	  0x24ab24e67d5301a8 ,  0xe6929283ba621983 ,  0x6b2ca9906505481e ,  0xa7bcdbf3c070d8ab , // 30464
	  0xa4b01973995011f9 ,  0x26ecf21616f87f42 ,  0x960fbe073ff048b8 ,  0xda346d22a7993bc9 , // 30720
	  0x9e1c8c306d5021e2 ,  0x326e4bc6318c2cb2 ,  0xa0d7e9ebc16a2654 ,  0xefffbf294bf7ea19 , // 30976
	  0xbc092db8d86ee0b2 ,  0x262c22b98ad08e52 ,  0xcdf6646e9c1c1734 ,  0xa3b8390486ad4615 , // 31232
	  0x98b6395176b8613a ,   0x8b38904a237ece0 ,  0x554f8fe70e487fc1 ,  0xe6dadab4579c9dc8 , // 31488
	  0x11f35d591e4281f7 ,  0xe15cdb853508d796 ,  0xd32c0ac82c5b6d03 ,  0x6681a7b16825190d , // 31744
	  0x9ea95df8fe6daee9 ,   0x8b944cf0e6c7930 ,  0xe7a1343cfa8ba80e ,  0x2bc7362b8cf5894b , // 32000
	  0x8d64cbde609da3a6 ,  0xeabf0df7b572a8de ,  0x3f8bf6a2f81e5421 ,  0x79d299e6c53bb27d , // 32256
	  0xae4f4f2a46ae686f ,   0xa8dffea8805fe49 ,  0xc3e9f098735670d4 ,  0x98e06c487032f65e , // 32512
	  0xe514236e3eaaddc9 ,  0xa6dd552156214992 ,  0x3916bdbb5d7fa824 ,  0x9c6544e2c8b7bf78 , // 32768
	  0xf93fe6c2bb27a6ea ,  0xb3c41769ce5b503a ,  0x1d2f8cdd6cf037cb ,  0x5e398050bc0064dc , // 33024
	  0xe6efc3f9e5bb3685 ,   0x8258aa79905cf79 ,  0xed3b5756c46dd4f2 ,  0xa232359de3a1e0d3 , // 33280
	  0xe06fbf16cf5f7dc7 ,  0x1388a224e8ba2e0e ,  0x565bd798f016b460 ,  0xbb3133a1bcbf1c74 , // 33536
	   0xaf8ccaf152b8b34 ,  0x4df4a567a5d2928e ,  0x6198820444ef8a9f ,  0xe2ce829c6832ed43 , // 33792
	  0xd32d927064f93314 ,  0xfcc3f19df37ecd46 ,  0xa9cd52aa480900a7 ,  0xf7518d930cff7508 , // 34048
	  0x97f4ec13a5bca616 ,  0xb76104bc7d30a20a ,  0x56ea05e7879567f8 ,  0x4126df43ef9ad77f , // 34304
	  0xd66dc883b085753e ,  0xf9f65b289f4089c1 ,  0xfdec03569e5bb6a6 ,  0x13d0f050703ca8b0 , // 34560
	  0x71af04378e825548 ,  0x2d125db6c4d2f89c ,  0xca0970aac01f9376 ,  0x644cfb340d0c93b5 , // 34816
	  0x5a0ebfcc09477b93 ,  0x912e04dfe89f7371 ,  0x52a9870d9ef251ee ,  0xfdbbff545ddbf4ca , // 35072
	  0xd47d683a1ed049d5 ,  0xbade2d01cd15e7d2 ,   0x13e0388ed585222 ,  0x90be2cef15c77eab , // 35328
	  0x1d64259e804d2bd7 ,  0xc2965161b9c64c8d ,  0x5d31c38e4dff347c ,  0xf9d300073e750f02 , // 35584
	  0xfbf35999acb09c32 ,  0x8889b010260c39c7 ,  0x18836bbedbae9b96 ,  0x2db90f6cb01edcf5 , // 35840
	  0xfac1728ca1382c0a ,  0xc24e7610e8d3dc3a ,   0x72fb1a58b3bb1e4 ,  0x16f24571ce6b5921 , // 36096
	  0x18c48e23b4f7714a ,  0xaf3a2bef23524197 ,  0xb272c83b180f6880 ,  0xd9ef4fd8af7ed9dd , // 36352
	  0xa0422859fd3901b0 ,   0x6534beb9ed9986c ,  0xd38f7885f331f5bd ,  0x7f97c2fa107df72b , // 36608
	  0x5ae25d3cccbcbda2 ,   0x21da419798da9eb ,  0x4ba0c1537fa739e5 ,  0x7a9a62f58938057e , // 36864
	  0xe79a978d089c9178 ,  0xd95a47ee7222ecf0 ,  0x6cd677557bc64e2d ,  0xf39a3c1d2f477a6e , // 37120
	  0x128187efd13d448e ,  0xeb331d4c9281679e ,  0xbee32a6602d562de ,  0x865d5f90fbf10cbf , // 37376
	  0x6f9731d7d6d64987 ,  0x5558e1105cbf454a ,  0x35bac5a4f4a49057 ,  0xc3afb47cf0fd10f8 , // 37632
	  0x8155d784111e5f37 ,  0x5c6ab39ac5edf827 ,  0xfa673563b4e1c041 ,  0x40d7e3c305878179 , // 37888
	  0x7e737ed203f01f63 ,  0x1228e541fec95d6c ,  0x7fb2f88ff8c9cb2f ,  0xce955f4b1a2df457 , // 38144
	  0x3a7ac08681900010 ,  0x513444397177d8c9 ,  0xa05197cf6f4bf025 ,  0x2a7ca1eb037eea17 , // 38400
	  0x17fc7de0257fa1c3 ,  0x99a5c11b299fcb3d ,  0xa9d28734cc0bd3d9 ,  0x2bd1bc59575a7189 , // 38656
	  0xfe949a5c81b8aa28 ,  0xce01c801701b9503 ,  0x87ea03d453b7adcb ,  0x1a7b5038f55f966a , // 38912
	  0x7c3b72878ac6bdcf ,  0xfd547c1dfdce3fc3 ,  0xfab5b87039ff4660 ,  0xdb421ea06c96ba81 , // 39168
	  0x7589c4ee8cb9d0d5 ,  0xd27410a29df888d9 ,  0x48f9662268e36c99 ,  0x9de8dc04578398fd , // 39424
	  0x682092d573b6f202 ,  0xf494a2990b57c020 ,  0x7cc683a689287d60 ,  0x423ac527f2b5fde8 , // 39680
	  0xe8e2898a402e6246 ,  0xa95991f4f280e762 ,  0xaceece9930c94452 ,  0x768bfeaf5ed40bc7 , // 39936
	  0xe13239a3c5365143 ,  0x7e060026ae7ef160 ,  0x569317e9d8cf83e1 ,  0x14a339ddbc417c8b , // 40192
	  0x599924eccce109c2 ,  0x155cf5b3807efb86 ,  0xb52df613717a88c6 ,  0xcaa3e91dc294bcb4 , // 40448
	  0xbdc9c7cb47701b7a ,  0xacbf36871a4b0319 ,  0x3589cc0e8c2fdb55 ,  0x80667eeea9e1d497 , // 40704
	  0xf398234677d4782e ,  0x32245a02dbc19915 ,  0x35e4dd3d6eec8171 ,  0x705b8521de300655 , // 40960
	    0x77cb9efffeec26 ,  0x64bc39d2074ce5bb ,  0x2cce692f740b3191 ,  0x6d1728ac921a5929 , // 41216
	  0xcf4786bac99d04bd ,  0x37e8c8c553c57abc ,  0x4bc8864a2c220fe8 ,  0xe4931760c9c61e67 , // 41472
	  0xefe61d43bdc366b7 ,  0xfe5abd344a730729 ,  0x9edc9e20ce9992c9 ,  0xed6a93ee9c6701ae , // 41728
	  0x291870bbe5f19b4f ,  0xcd324e6d47aab79d ,   0x647754de92959b5 ,  0xb4bdab0ae233682b , // 41984
	  0xdbe4ba961e06f801 ,  0x3cbdadda6cad0a49 ,  0x528cef982bb818a2 ,  0x8bbc5e0cf29e79ab , // 42240
	  0xb9635be5d17f7d7e ,  0x4d1f1b28740e6b87 ,  0x4a251853f32f811a ,  0xf283dce6a3e6ae02 , // 42496
	  0x12e32b2b867cbd99 ,  0x4301c9e116bff5ac ,  0x97b78c1c85fe9749 ,   0x9a1211da5a37694 , // 42752
	  0x1de8aa9170030fbd ,  0x6a962347f8e33c39 ,  0x38b39a0364d9b092 ,  0xe4ed647143841383 , // 43008
	  0x7ba72e3089ea40ce ,  0xd063442186905259 ,  0x8e13d78b5cb9c9a5 ,  0x71019824cf8355d6 , // 43264
	  0x2bac1c5c72fe12f7 ,  0x419ac855368526a2 ,  0xd8a559c10b353c0b ,  0x42529f7aa614272d , // 43520
	  0xda5f3073437fbbf3 ,  0x347a25292a016844 ,  0x8a5ad1e070c853ce ,  0xf8f77033638f3ff6 , // 43776
	  0x4ea581ce28a12a61 ,  0xb410063b8d80b5ac ,  0x22e58b54f0b8c806 ,  0x7e9ba983ba959671 , // 44032
	  0x91345d63315954a3 ,  0x46a46d39b8f8ef6c ,  0x567410b7ec472e02 ,  0xb3f91d89ce66999c , // 44288
	  0x3c74aa1fec2890bb ,  0x854f5e9bdb45ff20 ,  0x82a705bdabf2bbcc ,  0xe13103ec78a7c460 , // 44544
	  0x4d5bdccd41f947c5 ,  0xc5fe631323f8e109 ,  0x9ed4589bbf46cb4d ,  0x255453de27e89964 , // 44800
	  0xf885e9d02b276d3f ,  0x284ce75d383face3 ,  0xd32e404424c5b4f2 ,  0x2d007bb7187f9864 , // 45056
	  0x31663c83e36bf0fc ,  0xc268d1b25c896e23 ,  0xb6bf2294c4682873 ,  0x282ba47af80a4447 , // 45312
	  0xdf0da62ddd3d17b2 ,  0x3ac0267cbf855640 ,  0xe29e26fa51091916 ,  0xb684508719cdb189 , // 45568
	  0xb28070cc65a30f4f ,  0x30c430902f604cf8 ,  0x703440b3695d3ed2 ,  0x93956aae53416923 , // 45824
	  0x3b610d1b709c7b63 ,  0x54b59fa499e846ce ,  0x82a70864687c0dc7 ,  0x80899dba74e804e6 , // 46080
	  0xe154729546cdb997 ,  0x7629eeb8d5124899 ,  0xed44fa9ec6d97f94 ,  0xaa10a4e484a1d8d9 , // 46336
	   0x76b8ef11a08c651 ,  0x3211fb5e8689a3ce ,  0x6daa64f5980acdf9 ,  0x71d3ef4ef895305e , // 46592
	  0xd4e4a607bc382470 ,  0xd440e67286e43589 ,  0x48cd0a5145630106 ,  0xe228c6807c1ed86e , // 46848
	   0xb30edefb3bbf8b8 ,  0x52705496152852e0 ,  0x3fd5a5a152b93970 ,  0x7bb28b36156578cf , // 47104
	  0x4a49e5d038ba0348 ,  0x931d13ce146ebf85 ,  0x5ac5bfa2e6fb3b0b ,  0xb3c2c6f6694a7c91 , // 47360
	  0xdbc18ea2a29a32cd ,  0xa27495ea953e5176 ,  0xb036ca6e393917d8 ,  0x6322c0ee716bb993 , // 47616
	  0x2f54319df4143ed2 ,  0x79c12302f841fb0c ,  0xdac635ab39d38701 ,  0x8aa435404ca49365 , // 47872
	  0x8b0957b8a31911cf ,  0xcdc8ec41a102283a ,  0x4fc91a9172d8a1df ,  0xd03b291e8423c1ee , // 48128
	  0x167c3005eb9071bc ,  0x46020ade939688f3 ,  0x7968cd01fee9cffe ,  0xc814ad4c4e37ac35 , // 48384
	  0x575c47eb94f997f5 ,  0xe636e00e3a2ca0d5 ,  0xb1a2bae48c7b2aad ,   0xfbd8fa75be29920 , // 48640
	  0x13490965df841805 ,  0x69567c1aeef76278 ,  0x4275a2de327ab3f4 ,   0x40e847be734b404 , // 48896
	  0x5ebed6c1266e97b7 ,  0xa5233d6421dccc93 ,   0x9ef7b3ddc0735cc ,  0xf543bcbedf98211e , // 49152
	  0x6bcedf46477d5a4f ,  0x1f8e3df0cb96e32d ,  0xa6025454b9c0af82 ,  0xd73c40f22c786f79 , // 49408
	  0x841a9c06be33e9ee ,  0xaadb60e760ddfe95 ,  0x302ba2dedd98bf4a ,  0xffc955982264d5e4 , // 49664
	  0x5ad131b9d39fadaf ,  0x9d62f2f5f0e7affa ,  0xd22cadc969b90479 ,  0x92fcfaea19eeced0 , // 49920
	   0x1ea2257f0f155fe ,  0xd208e65e9dfd2130 ,  0xb9dc68b27b27df99 ,  0xc6c288b8624a9bd7 , // 50176
	   0x434905168187205 ,  0xd1f6ec40c887c386 ,  0xcb9fa3defee6c177 ,  0x9c3dc55439a1548c , // 50432
	  0x80bd85fd03895858 ,  0x5685453e0b66c472 ,  0x3adf4ed3968f48b2 ,  0x28ba28cbb953285b , // 50688
	  0x6673f205bb5c7683 ,  0xe32b188828dce145 ,  0x6ed2e0a245c43148 ,  0xfae2f20e35388f06 , // 50944
	  0xb78323b6357b753b ,  0x65922a6513980489 ,  0x6bf5f016007bbb26 ,  0xe7d2f19afc7182ce , // 51200
	  0xa5c1c9b8eac3c97c ,  0x62d2093495bfcca3 ,  0xd5be9750e8d8bed1 ,  0xf7291ad8df71df62 , // 51456
	  0x52b4de6b778aa6c2 ,  0xb8382ef4bfa178d9 ,  0x29b59d0cb9acf44c ,  0x22403f2176c71fab , // 51712
	  0x7f37da3531a217fe ,  0x17ea4fae53cfe118 ,  0x5ed90552e7bf8ad1 ,  0x9712e63727e6fc0c , // 51968
	  0xc14d49c9b266be02 ,  0x442545ea37703f4a ,  0xd0b952ecf85e3bca ,  0x49067b296d56766a , // 52224
	  0xbc07106db8200336 ,  0x70ca9afd58ceca99 ,  0x9f0c52529bad50c7 ,  0xfdf67bf36728b80f , // 52480
	   0x6518c83e37df904 ,  0xb80d05e3463f36ae ,  0x47bdc7a2e76c9113 ,  0x25f175fdb2dc6793 , // 52736
	  0x49e655c252e35bf9 ,  0xfb31f666a5a27971 ,   0xc6b7ec1b8056bd1 ,  0x7596ea92c0e66132 , // 52992
	  0x3f6d8813ca39ec19 ,  0x8d29da52cb2d9cf3 ,  0xb0fa0b4ebb0832ff ,  0x8ce1e489559a3a82 , // 53248
	  0xa061ec6732b7045e ,  0x38ba6aba7f96c3ea ,  0x6d53941067f453fa ,  0xae1347d900af06cb , // 53504
	  0x5ce512c5f287a050 ,  0xae955e2f371247b6 ,  0xd16d05dd2d701a88 ,  0x796a77590e0538dc , // 53760
	  0x4c668fdfc4680331 ,   0x9b4438996bc9c2d ,  0x242e51346488c192 ,  0x75678864746783b5 , // 54016
	  0x7a4f8cf4c570a267 ,  0x711f8b5cf30e3e2c ,  0x17765d25c0bc2f5e ,  0x46a7f2abf6e33bae , // 54272
	  0x80a745aac92c3b94 ,  0xe2e054ebc603be1b ,  0x5bf4541857bb4853 ,  0x4d77d40d9d682092 , // 54528
	  0x7cfe764b8463d0f8 ,  0x7e5a1973f274189b ,  0x22d3acf5f50175f0 ,  0x555c222e524e06c9 , // 54784
	  0x838263ba56a39fe2 ,   0x8192f5451f5bd6f ,  0x7dbffda7b45d1dac ,  0x2c94cd630ec24d63 , // 55040
	  0xd4c8aae87ed7f106 ,  0x19497281a423243e ,  0x9001f95289e7f410 ,  0x5b67b7b11dd73b99 , // 55296
	  0x52199668b8740438 ,  0x260de43926ebdb38 ,  0xd0bd926cea1e3e56 ,  0x80f28be662b9c454 , // 55552
	  0xbc177269bb2eae24 ,  0xbefb6d52aea28889 ,  0x3bbd6e88a1866e6f ,  0x2534769d85efd2fa , // 55808
	  0x9e1b343ce9e2c928 ,  0x2779b8ea4c2d119b ,  0x6335e5d5b21ed420 ,  0x4e8c99425d692fdc , // 56064
	  0xc7c281ef1e86b390 ,   0xaa3dd2fd562e673 ,  0x7feb67c7ea6b18a9 ,  0x7f299282f9fded8d , // 56320
	  0xbeb7503918f0f5e0 ,  0xb91ce6ec8ecd474d ,  0xcd074f46cff446b2 ,  0x7a30af84ef5abd2b , // 56576
	  0xbd3806784aa5dd4f ,  0xabef65af9b73eff6 ,  0x66e6369739c4709f ,  0x932387ce05eb2283 , // 56832
	  0x3b897b55a66e3b87 ,  0x382e4bf81bb54990 ,  0xe6e2191ee20593a1 ,  0x916fbb9836e3f1bc , // 57088
	  0x856836f9b79125ee ,   0xd0b670b01fa342f ,  0x8bac86c9b4bdc47c ,  0x63a84bedf7b59604 , // 57344
	  0x64ba123050500176 ,  0xfda72a179627d02a ,  0xfd74f862a4f5af1b ,  0xbfb9a8ff03e7699b , // 57600
	  0x7c63286b4347735c ,  0x5227cc9a5e87415a ,  0x9b0088d2fd805f95 ,  0xed2b714d56da6ea7 , // 57856
	  0x1f5c3bbb54570919 ,  0xfdfcf3cdb1ff7745 ,  0x44b75001c21ad498 ,  0x993ee3468be36fb3 , // 58112
	  0x6f7a881842c80832 ,  0x4597f803b6ec4ac4 ,  0x31a583b96517f50c ,  0x3bfe2e704d58b681 , // 58368
	  0xcb9cc23610be04d3 ,   0x767f3a505c63cb6 ,  0x44a91a6f088d9e2d ,  0x285ed3972d85d535 , // 58624
	  0xf7d2fef7a9eb7f9f ,  0x4366973f4db9ee30 ,  0x7c8528077765fd5e ,  0x353a960cc5b0fae0 , // 58880
	  0xa63cdb89c1e52a69 ,  0xc0914fc775bda3f1 ,  0x3506de574032dfda ,  0xcd26732eb7a1a071 , // 59136
	  0x279e624fab6af5ea ,  0x17b336e6819ebed1 ,  0x23cdbf7cfc7c05a2 ,  0x7f232d3668050417 , // 59392
	  0xbd8d784148e1da5b ,  0x5908125892a7bfb4 ,  0x4bb7d6a675e69e4a ,  0x7808c4f0f59f2449 , // 59648
	  0x3524e3041aa32e08 ,  0x2023f324e00620db ,   0xa7e61d65a7ae665 ,  0xcde31c62b539eff4 , // 59904
	  0xea521f0900831af2 ,  0xe4a9937fcd193ea3 ,  0x5993fa90ec3752b7 ,  0xe8353a06a834d046 , // 60160
	  0x66c90ad20d08daa7 ,  0x9a05f60f29123211 ,  0x87f6a015edc47155 ,  0xceac839d3acbd6af , // 60416
	  0xa69ce08791937296 ,  0x5ef439b86f7d5582 ,  0x9cb37c64d4654902 ,  0xede3777bc6c0473c , // 60672
	  0x480ee47a5fd49bbf ,  0x796d91ba596da349 ,  0x9a1169dbf4141752 ,  0x81cb345396f31772 , // 60928
	  0x49ecddc6cd1f5403 ,  0xc11a598d1934367d ,   0x77de85d8cbd1332 ,  0x994a1aaf8e1a087a , // 61184
	  0x163cecdffef6081e ,  0xb3cf18fff414c0d8 ,  0xde412abd4822ed53 ,  0xf9cb2b8f8a595e63 , // 61440
	  0x7082825f4fb798bd ,  0x3c637508982175e0 ,  0x11c8b4b6d83aad1e ,  0x2e31f0e5c1267b71 , // 61696
	  0xe98cecdf7b548bf3 ,  0x148976a5958f50d7 ,  0xf27e3d85d1af9873 ,  0xf2f9e9014d980f41 , // 61952
	  0x85d461317b41cced ,  0x19ff04caabb60912 ,  0x4592a0600b19fe1e ,  0x8b208080108ad336 , // 62208
	   0xc15cb2ba35f3259 ,  0xb0a5f59cd326b837 ,  0xbf9186ff17a9ec79 ,  0x5141f107f9d39a1c , // 62464
	  0x36a75607d4c8784f ,  0x8d8428c9c1474b83 ,  0x1fc3110e47eb7ccc ,  0x3bd292155abedfc7 , // 62720
	  0x68e3ba9f415c7ab9 ,  0x961790cb581c4476 ,  0xb3d97260abafabd5 ,  0xd71fb850b5347dcd , // 62976
	  0x552b6d954a828f74 ,  0x46ec4f8a1522ab48 ,  0x6cca1cadbe260d97 ,  0x8bcb0e93a41bb845 , // 63232
	  0x5ea9efd397d6aae0 ,  0xdcd68078e6844496 ,  0xd8ec7d97a440bce3 ,  0x8374eca5ac9a3f64 , // 63488
	  0x7b8fe43ae926df78 ,   0xef271afdf338537 ,  0xe3b57b4c7c94758c ,  0x6343375c39403054 , // 63744
	  0xa889c92631092996 ,  0x3c013134ce2e001f ,  0x7d814baf6a94f0d5 ,  0xfd35b89cc7478708 , // 64000
	  0xa811b5301bb5d581 ,  0xa9e811dedac5f285 ,  0x95a7804c95bccd1a ,  0x51180748784951b8 , // 64256
	  0x41f73604915091cb ,  0x178ee9678f92848b ,  0x386468d11bbfa423 ,   0x9133a8257842060 , // 64512
	   0xa977c23464df1dc ,  0x7aa2bdb082633351 ,  0x8dc65212b2f1422e ,  0xe03e0ef136140b43 , // 64768
	  0xe54393a9e11543a8 ,  0xb921ef88c7aa79bb ,  0x353dd7ec88a9c53c ,  0x753997840088a3b9 , // 65024
	  0xe2d8ec436ad726ed ,  0xad52813608753e97 ,  0xe07572f12a6bcea1 ,  0x363781554b05e595 , // 65280

 ];
 
 pub(crate) const EULER_TOTIENT_LUT : [u8;256] = [
 
    0,  1,  1, 2, 2, 4, 2, 6, 4, 6, 4, 10, 4, 12, 6, 8, 8, 16, 6, 18, 8,
   12, 10, 22, 8, 20, 12, 18, 12, 28, 8, 30, 16, 20, 16, 24, 12,
   36, 18, 24, 16, 40, 12, 42, 20, 24, 22, 46, 16, 42, 20, 32, 
   24, 52, 18, 40, 24, 36, 28, 58, 16, 60, 30, 36, 32, 48, 20, 
   66, 32, 44, 24, 70, 24, 72, 36, 40, 36, 60, 24, 78, 32, 54, 
   40, 82, 24, 64, 42, 56, 40, 88, 24, 72, 44, 60, 46, 72, 32, 
   96, 42, 60, 40, 100, 32, 102, 48, 48, 52, 106, 36, 108, 40, 
   72, 48, 112, 36, 88, 56, 72, 58, 96, 32, 110, 60, 80, 60, 100,
   36, 126, 64, 84, 48, 130, 40, 108, 66, 72, 64, 136, 44, 138,
   48, 92, 70, 120, 48, 112, 72, 84, 72, 148, 40, 150, 72, 96, 
   60, 120, 48, 156, 78, 104, 64, 132, 54, 162, 80, 80, 82, 166,
   48, 156, 64, 108, 84, 172, 56, 120, 80, 116, 88, 178, 48, 180,
   72, 120, 88, 144, 60, 160, 92, 108, 72, 190, 64, 192, 96, 96,
   84, 196, 60, 198, 80, 132, 100, 168, 64, 160, 102, 132, 96, 180, 
   48, 210, 104, 140, 106, 168, 72, 180, 108, 144, 80, 192, 72, 222, 
   96, 120, 112, 226, 72, 228, 88, 120, 112, 232, 72, 184, 116, 156, 
   96, 238, 64, 240, 110, 162, 120, 168, 80, 216, 120, 164, 100, 250, 
   72, 220, 126, 128
 ];
 
    // missing 0
 pub(crate)  const CARMICHAEL_LUT : [u8;254] = [
 	     1, 1, 2, 2, 4, 2, 6, 2, 6, 4, 10, 2, 12, 6, 4, 4, 16, 6,    
             18, 4, 6, 10, 22, 2, 20, 12, 18, 6, 28, 4, 30, 8, 10, 16, 
             12, 6, 36, 18, 12, 4, 40, 6, 42, 10, 12, 22, 46, 4, 42, 20, 
             16, 12, 52, 18, 20, 6, 18, 28, 58, 4, 60, 30, 6, 16, 12, 10, 
             66, 16, 22, 12, 70, 6, 72, 36, 20, 18, 30, 12, 78, 4, 54, 40, 
             82, 6, 16, 42, 28, 10, 88, 12, 12, 22, 30, 46, 36, 8, 96, 42, 
             30, 20, 100, 16, 102, 12, 12, 52, 106, 18, 108, 20, 36, 12, 112, 
             18, 44, 28, 12, 58, 48, 4, 110, 60, 40, 30, 100, 6, 126, 32, 42, 
             12, 130, 10, 18, 66, 36, 16, 136, 22, 138, 12, 46, 70, 60, 12, 
             28, 72, 42, 36, 148, 20, 150, 18, 48, 30, 60, 12, 156, 78, 52, 
             8, 66, 54, 162, 40, 20, 82, 166, 6, 156, 16, 18, 42, 172, 28, 
             60, 20, 58, 88, 178, 12, 180, 12, 60, 22, 36, 30, 80, 46, 18, 
             36, 190, 16, 192, 96, 12, 42, 196, 30, 198, 20, 66, 100, 84, 16, 
             40, 102, 66, 12, 90, 12, 210, 52, 70, 106, 84, 18, 30, 108, 72, 
             20, 48, 36, 222, 24, 60, 112, 226, 18, 228, 44, 30, 28, 232, 12, 
             92, 58, 78, 48, 238, 4, 240, 110, 162, 60, 84, 40, 36, 30, 82, 
             100, 250, 6, 110, 126]; 
 
 
 pub(crate) const DERIVATIVE_LUT : [u8;94]  = [
 	1, 1, 4, 1, 5, 1, 12, 6, 7, 1, 16, 1, 9, 8, 32, 1, 21, 1, 24, 
 	10, 13, 1, 44, 10, 15, 27, 32, 1, 31, 1, 80, 14, 19, 12, 60, 
 	1, 21, 16, 68, 1, 41, 1, 48, 39, 25, 1, 112, 14, 45, 20, 56, 
 	1, 81, 16, 92, 22, 31, 1, 92, 1, 33, 51, 192, 18, 61, 1, 72, 
 	26, 59, 1, 156, 1, 39, 55, 80, 18, 71, 1, 176, 108, 43, 1, 124, 
 	22, 45, 32, 140, 1, 123, 20, 96, 34, 49, 24
 ];
 
 //pub(crate) 
  
 #[test]
 fn check_sum(){
 fn hashdata64(data: &[u64]) -> (u64,u64,u64) {
  let mut sum = 1u64;
  let product = 6084759759023560598u64;
  let mut min = u64::MAX;
  let mut max = 0u64;
  for i in data{
   sum = sum.wrapping_mul(product).wrapping_add(*i); 
   if i < &min {
     min = *i
   }
   if i > &max {
    max = *i
   }
  }
  return (min,max,sum) 
}

assert_eq!(hashdata64(&LIOUVILLE_LUT[..]), (33719405988736038, 18431357061890889188, 8608577211795710703))

 }