找回密码
 欢迎注册
楼主: wayne

[讨论] 被连续自然数取模后全为质数的最小整数

[复制链接]
发表于 2020-8-8 16:59:38 | 显示全部楼层
139 (1m30s)
4188696294935413706934768125377042512002
140(1m37s)
4188696294935413706934768125377042512002
141(1m36s)
4188696294935413706934768125377042512002
142(23s)
71375535419096138855747944430720887776002
143(23s)
71375535419096138855747944430720887776002
144(25s)
71375535419096138855747944430720887776002
145(26s)
71375535419096138855747944430720887776002
146(0.6s)
71375535419096138855747944430720887776002
147(0.6s)
71375535419096138855747944430720887776002
148(0.6s)
71375535419096138855747944430720887776002
149(0.6s)
71375535419096138855747944430720887776002
150(0.6s)
71375535419096138855747944430720887776002
151(2m24s)
28466105341303483745606123156025578668368002
152(2m19s)
28466105341303483745606123156025578668368002
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2020-8-8 17:20:22 | 显示全部楼层
153~156
28466105341303483745606123156025578668368002
157
81849859751405924059843476855289279826496002
158~162
746294017377509464097706103446488143037568002
163~165
33635406647457932883180477167488271261164992002
166
154918018148228242519886464835636651505317472002
167~168
299084197184085790849033982186295000595719696002
169~172
3531371825353917671492584999407565716875889792002
173
116810701936766586361368933161051719437728630688002

点评

笔记本还是强劲的  发表于 2020-8-9 11:53
242~250:1439011990188211741334841754244394476887612560371605459101394720656002  发表于 2020-8-9 09:49
准确地说242需要的是时间……我给你的242是n<242的情况,对n=242..250,只能用时间慢慢熬。用的内存并不多,真正找到n=242只需要10G内存……但需要把全部10G数据的循环节重复两万多次(PS.我也是笔记本)  发表于 2020-8-9 09:47
赞,算242需要用多大的内存?我现在在173左右基本上卡住了,笔记本内存比较小。  发表于 2020-8-9 05:54
242:4828299556190106737188708726420164405880642740182586600077808144002  发表于 2020-8-9 02:54
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2020-8-9 00:52:56 | 显示全部楼层
本帖最后由 .·.·. 于 2020-8-9 09:48 编辑
mathe 发表于 2020-8-8 17:20
153~156
28466105341303483745606123156025578668368002
157
rayon.7z (10.27 KB, 下载次数: 0)
  1. 00:46:49> g=(a,b,c)->d=a*2^128+b*2^64+c;for(i=3,900,if(!isprime(d%i),print(i);break));d
  2. %21 = (a,b,c)->d=a*2^128+b*2^64+c;for(i=3,900,if(!isprime(d%i),print(i);break));d
  3. 00:47:01> g(1040147161867, 7560342529706118980, 11446842006473251970)
  4. 179
  5. %22 = 353943738186338730051340043852386052151622936272002
  6. 00:47:03> g(343275800605, 11767202774273793771, 15199516501634173186)
  7. 178
  8. %23 = 116810701936766586361368933161051719437728630688002
  9. (BigUInt=g)
  10. 01:40:11> BigUInt(336184657781948, 13060152521397031879, 17401726287141301250)
  11. 193
  12. %57 = 114397711072547200623926739913773332504663121492864002
  13. 01:40:22> BigUInt(76640775490436, 17224944753369267051, 5535650887625968770)
  14. 191
  15. %58 = 26079504486542128214527139484976208504732884352208002
  16. 01:40:27> BigUInt(21921671246381, 11662777460910458884, 7012004375286606722)
  17. 181
  18. %59 = 7459558178581420991908368303782280420035186413104002
  19. (194:)655569072883475643276379698332630870445125049195696002(code is incorrect thus do not generate the BigUInt form.)
  20. 01:40:35> BigUInt(21550470068748838, 14667185391198351420, 18069870029154129154)
  21. 197
  22. %60 = 7333244963252694316979523001920058246398799258689312002
  23. 01:43:43> BigUInt(49238389357311262, 5374406407451916197, 11540656834366258178)
  24. 199
  25. %61 = 16754955673880622369079802324257242816195831706070400002
  26. 01:48:23> BigUInt(3649368858081476934, 14762377635946019554, 17114688005815144834)
  27. 206
  28. %68 = 1241815872795527340920909004524886711949273374627222000002
  29. 02:23:53> BigU256=(a,b,c,d)->e=a*2^192+b*2^128+c*2^64+d;for(i=3,900,if(!isprime(e%i),print(i);break));e
  30. %102 = (a,b,c,d)->e=a*2^192+b*2^128+c*2^64+d;for(i=3,900,if(!isprime(e%i),print(i);break));e
  31. 02:24:15> BigU256(11, 9338117007605686109, 5914508867865278435, 9449427700573572482)
  32. 211
  33. %103 = 72225715647186222395152227158525640349057726424522471280002
  34. 02:24:25> BigU256(13, 11922583201728322026, 11442997097915309871, 16504593912194840962)
  35. 214
  36. %104 = 85659367391722784092607464197468049651961443566063782640002
  37. 02:24:34> BigU256(5045, 14915641366288941122, 12556338656733202238, 1357278714895837442)
  38. 218
  39. %105 = 31673053784774069114917859005213870009008990233082429871008002
  40. 02:32:50> BigU256(105642, 4594879267310787348, 12542645452379590053, 6593728445292498434)
  41. 223
  42. %107 = 663127145086112525715369034835863236326107289562909156940992002
  43. 02:33:13> BigU256(324382, 16707202402379446201, 2441149314094187990, 17344994933329711234)
  44. 226
  45. %108 = 2036184500294580388401873354629853515994924364902165172748112002
  46. 02:35:06> BigU256(29594670, 3914874787019208054, 5083363177805329805, 9126329000077058178)
  47. 233
  48. %111 = 185768755747358998327069097333443876936859437235420585132525904002
  49. 02:38:55> BigU256(769192496, 13818213026569080142, 10363200697496292489, 12843986744144596610)
  50. 242
  51. %115 = 4828299556190106737188708726420164405880642740182586600077808144002
  52. 09:38:56> BigU256(229247836159, 2678296511289632618, 6941544924194096003, 919448886373386882)
  53. 251
  54. %2 = 1439011990188211741334841754244394476887612560371605459101394720656002
复制代码

(Pinyin IME is broken.. cannot type Pinyin, sorry..)
$ rustc main.rs -O && time ./main
i=87,len=12,rep=BigUInt(33, 17315042437149894138, 5041259723618722944)
i=88,len=12,rep=BigUInt(33, 17315042437149894138, 5041259723618722944)
i=89,len=276,rep=BigUInt(3020, 9959018788447794178, 5950257633037103232)
i=90,len=276,rep=BigUInt(3020, 9959018788447794178, 5950257633037103232)
i=91,len=276,rep=BigUInt(3020, 9959018788447794178, 5950257633037103232)
i=92,len=276,rep=BigUInt(3020, 9959018788447794178, 5950257633037103232)
i=93,len=276,rep=BigUInt(3020, 9959018788447794178, 5950257633037103232)
i=94,len=276,rep=BigUInt(3020, 9959018788447794178, 5950257633037103232)
i=95,len=276,rep=BigUInt(3020, 9959018788447794178, 5950257633037103232)
i=96,len=276,rep=BigUInt(3020, 9959018788447794178, 5950257633037103232)
i=97,len=6624,rep=BigUInt(292992, 6794130646539351265, 5325924119602913408)
i=98,len=6624,rep=BigUInt(292992, 6794130646539351265, 5325924119602913408)
i=99,len=6624,rep=BigUInt(292992, 6794130646539351265, 5325924119602913408)
i=100,len=6624,rep=BigUInt(292992, 6794130646539351265, 5325924119602913408)
i=101,len=165600,rep=BigUInt(29592229, 3677664573221068002, 2962757942317257344)
i=102,len=165600,rep=BigUInt(29592229, 3677664573221068002, 2962757942317257344)
i=103,len=4305600,rep=BigUInt(3047999607, 9864569567578971902, 10016162879324680576)
i=104,len=4305600,rep=BigUInt(3047999607, 9864569567578971902, 10016162879324680576)
i=105,len=4305600,rep=BigUInt(3047999607, 9864569567578971902, 10016162879324680576)
i=106,len=4305600,rep=BigUInt(3047999607, 9864569567578971902, 10016162879324680576)
i=107,len=116251200,rep=BigUInt(326135958006, 4044531529505551460, 1818271812586827904)
break at i=107,TO=108
SHOULD check `TO` and `i` carefully!
loop0 finished
found number= BigUInt(343275800605, 11767202774273793771, 15199516501634173186) for n<178!
loop1 finished
loop2 finished
found number= BigUInt(1040147161867, 7560342529706118980, 11446842006473251970) for n<179!

real    0m20.571s
user    0m20.024s
sys     0m0.546s
  1. #![feature(const_int_pow)]
  2. /*
  3. LENGTH=500
  4. a=[True]*(LENGTH+1)
  5. a[0]=a[1]=False
  6. for i in range(2,LENGTH+1):
  7.   if a[i]:
  8.     for j in range(2,(LENGTH//i)+1):
  9.       a[i*j]=False

  10. print(("const ISPRIME:[bool;%d]= "%(LENGTH+1))+str(a).lower().replace(" ","")+";")
  11. [n for n,b in enumerate(a) if b]
  12. aa=[a for a in a]
  13. for i in [n for n,b in enumerate(a) if b]:
  14.   j=i*i;
  15.   while j<=LENGTH:
  16.     aa[j]=True
  17.     j*=i

  18. for i in range(1,200):
  19.     aa[i]=True

  20. #for u32
  21. print("\n".join(["N=>(self.5%N+N1*(self.4%N)+N2*(self.3%N)+N3*(self.2%N)+N4*(self.1%N)+N5*(self.0%N))%N,".replace("N5",str(2**(32*5)%n)).replace("N4",str(2**(32*4)%n)).replace("N3",str(2**(32*3)%n)).replace("N2",str(2**(32*2)%n)).replace("N1",str(2**32%n)).replace("N",str(n)) for n,b in enumerate(aa) if b]))
  22. #for u64 array
  23. print("\n".join(["            N=>(N2*((self.0)[0]%N)+N1*((self.0)[1]%N)+(self.0)[2]%N)%N,".replace("N2",str(2**(64*2)%n)).replace("N1",str(2**64%n)).replace("N",str(n)) for n,b in enumerate(aa) if b]))
  24. #for u64
  25. print("\n".join(["            N=>(N2*(self.0%N)+N1*(self.1%N)+self.2%N)%N,".replace("N2",str(2**(64*2)%n)).replace("N1",str(2**64%n)).replace("N",str(n)) for n,b in enumerate(aa) if b]))
  26. print("\n".join(["            N=>(N3*(self.0%N)+N2*(self.1%N)+N1*(self.2%N)+self.3%N)%N,".replace("N3",str(2**(64*3)%n)).replace("N2",str(2**(64*2)%n)).replace("N1",str(2**64%n)).replace("N",str(n)) for n,b in enumerate(aa) if b]))

  27. */
  28. const ISPRIME:[bool;501]= [false,false,true,true,false,true,false,true,false,false,false,true,false,true,false,false,false,true,false,true,false,false,false,true,false,false,false,false,false,true,false,true,false,false,false,false,false,true,false,false,false,true,false,true,false,false,false,true,false,false,false,false,false,true,false,false,false,false,false,true,false,true,false,false,false,false,false,true,false,false,false,true,false,true,false,false,false,false,false,true,false,false,false,true,false,false,false,false,false,true,false,false,false,false,false,false,false,true,false,false,false,true,false,true,false,false,false,true,false,true,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,true,false,false,false,false,false,true,false,true,false,false,false,false,false,false,false,false,false,true,false,true,false,false,false,false,false,true,false,false,false,false,false,true,false,false,false,true,false,false,false,false,false,true,false,false,false,false,false,true,false,true,false,false,false,false,false,false,false,false,false,true,false,true,false,false,false,true,false,true,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,true,false,true,false,false,false,true,false,false,false,false,false,true,false,true,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,true,false,false,false,false,false,true,false,false,false,false,false,true,false,true,false,false,false,false,false,true,false,false,false,true,false,true,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,true,false,true,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,true,false,true,false,false,false,true,false,false,false,false,false,true,false,false,false,false,false,false,false,true,false,false,false,false,false,true,false,false,false,false,false,true,false,false,false,true,false,false,false,false,false,true,false,false,false,false,false,false,false,true,false,false,false,true,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,true,false,true,false,false,false,false,false,false,false,false,false,true,false,true,false,false,false,false,false,true,false,false,false,true,false,false,false,false,false,true,false,false,false,false,false,false,false,true,false,false,false,true,false,true,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,true,false,false,false,true,false,false,false,false,false,false,false,true,false];
  29. const UPPER:u32=173;
  30. const HALF:u32=(UPPER>>1)+1;
  31. const TO:u32=108;
  32. fn main(){
  33.     let mut lcm=BigUInt(0,0,2);
  34.     for i in 3..HALF{
  35.         lcm=lcm.mul((i/gcd(i,lcm)) as u128)
  36.     }
  37.     let mut x=(vec![BigUInt(0,0,2)],lcm);
  38.     //x=search_roll(x.0,81,x.1);//3
  39.     //x=search_roll(x.0,49,x.1);//7
  40.     x=search_roll(x.0,121,x.1);//11
  41.     x=search_roll(x.0,125,x.1);//2
  42.     x=search_roll(x.0,128,x.1);//5
  43.     x=search_roll(x.0,169,x.1);//13
  44.     //x=search_roll(x.0,243,x.1);//3
  45.     //x=search_roll(x.0,289,x.1);//17
  46.     //x=search_roll(x.0,343,x.1);//7
  47.     for i in HALF..=TO{
  48.         x=search_roll(x.0,i,x.1);
  49.         println!("i={},len={},rep={:?}",i,(x.0).len(),x.1);
  50.         if (x.0).len()>10000000{println!("break at i={},TO={}",i,TO);break}
  51.     }
  52.     println!("SHOULD check `TO` and `i` carefully!");
  53.     let (mut b,lcm)=x;
  54.     b.sort_unstable();
  55.     let mut upper=search_once(&b,167);
  56.     for i in 0..3{
  57.         println!("loop{} finished",i);
  58.         b.iter_mut().for_each(|x|*x=x.add(lcm));
  59.         upper=search_once(&b,upper);
  60.     }
  61. }
  62. #[derive(Clone,Copy,Debug,Ord,Eq,PartialEq,PartialOrd)]
  63. struct BigUInt(u64,u64,u64);
  64. impl BigUInt{
  65.     #[inline]
  66.     pub fn add(self,other:Self)->Self{
  67.         //self+other
  68.         let l0=self.2 as u128  + other.2 as u128;
  69.         let (l0,g)=(l0 as u64,l0>>64);
  70.         let l1=self.1 as u128+g+other.1 as u128;
  71.         let (l1,g)=(l1 as u64,l1>>64);
  72.         BigUInt(self.0+g as u64+other.0 as u64,l1,l0)
  73.     }
  74.     #[inline]
  75.     pub fn expand(self,other:Self,b:u128)->Self{
  76.         //self+other*b
  77.         let l0=self.2 as u128  +(other.2 as u128)*b;
  78.         let (l0,g)=(l0 as u64,l0>>64);
  79.         let l1=self.1 as u128+g+(other.1 as u128)*b;
  80.         let (l1,g)=(l1 as u64,l1>>64);
  81.         BigUInt(self.0+g as u64+other.0*b as u64,l1,l0)
  82.     }
  83.     #[inline]
  84.     pub fn mul(self,b:u128)->Self{
  85.         //self*b
  86.         let l0=  (self.2 as u128)*b;
  87.         let (l0,g)=(l0 as u64,l0>>64);
  88.         let l1=g+(self.1 as u128)*b;
  89.         let (l1,g)=(l1 as u64,l1>>64);
  90.         BigUInt(g as u64+self.0*b as u64,l1,l0)
  91.     }
  92.     #[inline]
  93.     pub fn rem(self,b:u32)->usize{//match(x){...N=>t%N,...}is much faster than t%x if N is a constant.
  94.         (match b{
  95.             1=>0,
  96.             2=>(0*(self.0%2)+0*(self.1%2)+self.2%2)%2,
  97.             3=>(1*(self.0%3)+1*(self.1%3)+self.2%3)%3,
  98.             4=>(0*(self.0%4)+0*(self.1%4)+self.2%4)%4,
  99.             5=>(1*(self.0%5)+1*(self.1%5)+self.2%5)%5,
  100.             6=>(4*(self.0%6)+4*(self.1%6)+self.2%6)%6,
  101.             7=>(4*(self.0%7)+2*(self.1%7)+self.2%7)%7,
  102.             8=>(0*(self.0%8)+0*(self.1%8)+self.2%8)%8,
  103.             9=>(4*(self.0%9)+7*(self.1%9)+self.2%9)%9,
  104.             10=>(6*(self.0%10)+6*(self.1%10)+self.2%10)%10,
  105.             11=>(3*(self.0%11)+5*(self.1%11)+self.2%11)%11,
  106.             12=>(4*(self.0%12)+4*(self.1%12)+self.2%12)%12,
  107.             13=>(9*(self.0%13)+3*(self.1%13)+self.2%13)%13,
  108.             14=>(4*(self.0%14)+2*(self.1%14)+self.2%14)%14,
  109.             15=>(1*(self.0%15)+1*(self.1%15)+self.2%15)%15,
  110.             16=>(0*(self.0%16)+0*(self.1%16)+self.2%16)%16,
  111.             17=>(1*(self.0%17)+1*(self.1%17)+self.2%17)%17,
  112.             18=>(4*(self.0%18)+16*(self.1%18)+self.2%18)%18,
  113.             19=>(4*(self.0%19)+17*(self.1%19)+self.2%19)%19,
  114.             20=>(16*(self.0%20)+16*(self.1%20)+self.2%20)%20,
  115.             21=>(4*(self.0%21)+16*(self.1%21)+self.2%21)%21,
  116.             22=>(14*(self.0%22)+16*(self.1%22)+self.2%22)%22,
  117.             23=>(13*(self.0%23)+6*(self.1%23)+self.2%23)%23,
  118.             24=>(16*(self.0%24)+16*(self.1%24)+self.2%24)%24,
  119.             25=>(6*(self.0%25)+16*(self.1%25)+self.2%25)%25,
  120.             26=>(22*(self.0%26)+16*(self.1%26)+self.2%26)%26,
  121.             27=>(4*(self.0%27)+25*(self.1%27)+self.2%27)%27,
  122.             28=>(4*(self.0%28)+16*(self.1%28)+self.2%28)%28,
  123.             29=>(25*(self.0%29)+24*(self.1%29)+self.2%29)%29,
  124.             30=>(16*(self.0%30)+16*(self.1%30)+self.2%30)%30,
  125.             31=>(8*(self.0%31)+16*(self.1%31)+self.2%31)%31,
  126.             32=>(0*(self.0%32)+0*(self.1%32)+self.2%32)%32,
  127.             33=>(25*(self.0%33)+16*(self.1%33)+self.2%33)%33,
  128.             34=>(18*(self.0%34)+18*(self.1%34)+self.2%34)%34,
  129.             35=>(11*(self.0%35)+16*(self.1%35)+self.2%35)%35,
  130.             36=>(4*(self.0%36)+16*(self.1%36)+self.2%36)%36,
  131.             37=>(33*(self.0%37)+12*(self.1%37)+self.2%37)%37,
  132.             38=>(4*(self.0%38)+36*(self.1%38)+self.2%38)%38,
  133.             39=>(22*(self.0%39)+16*(self.1%39)+self.2%39)%39,
  134.             40=>(16*(self.0%40)+16*(self.1%40)+self.2%40)%40,
  135.             41=>(10*(self.0%41)+16*(self.1%41)+self.2%41)%41,
  136.             42=>(4*(self.0%42)+16*(self.1%42)+self.2%42)%42,
  137.             43=>(4*(self.0%43)+41*(self.1%43)+self.2%43)%43,
  138.             44=>(36*(self.0%44)+16*(self.1%44)+self.2%44)%44,
  139.             45=>(31*(self.0%45)+16*(self.1%45)+self.2%45)%45,
  140.             46=>(36*(self.0%46)+6*(self.1%46)+self.2%46)%46,
  141.             47=>(14*(self.0%47)+25*(self.1%47)+self.2%47)%47,
  142.             48=>(16*(self.0%48)+16*(self.1%48)+self.2%48)%48,
  143.             49=>(4*(self.0%49)+2*(self.1%49)+self.2%49)%49,
  144.             50=>(6*(self.0%50)+16*(self.1%50)+self.2%50)%50,
  145.             51=>(1*(self.0%51)+1*(self.1%51)+self.2%51)%51,
  146.             52=>(48*(self.0%52)+16*(self.1%52)+self.2%52)%52,
  147.             53=>(13*(self.0%53)+15*(self.1%53)+self.2%53)%53,
  148.             54=>(4*(self.0%54)+52*(self.1%54)+self.2%54)%54,
  149.             55=>(36*(self.0%55)+16*(self.1%55)+self.2%55)%55,
  150.             56=>(32*(self.0%56)+16*(self.1%56)+self.2%56)%56,
  151.             57=>(4*(self.0%57)+55*(self.1%57)+self.2%57)%57,
  152.             58=>(54*(self.0%58)+24*(self.1%58)+self.2%58)%58,
  153.             59=>(25*(self.0%59)+5*(self.1%59)+self.2%59)%59,
  154.             60=>(16*(self.0%60)+16*(self.1%60)+self.2%60)%60,
  155.             61=>(12*(self.0%61)+16*(self.1%61)+self.2%61)%61,
  156.             62=>(8*(self.0%62)+16*(self.1%62)+self.2%62)%62,
  157.             63=>(4*(self.0%63)+16*(self.1%63)+self.2%63)%63,
  158.             64=>(0*(self.0%64)+0*(self.1%64)+self.2%64)%64,
  159.             65=>(61*(self.0%65)+16*(self.1%65)+self.2%65)%65,
  160.             66=>(58*(self.0%66)+16*(self.1%66)+self.2%66)%66,
  161.             67=>(21*(self.0%67)+17*(self.1%67)+self.2%67)%67,
  162.             68=>(52*(self.0%68)+52*(self.1%68)+self.2%68)%68,
  163.             69=>(13*(self.0%69)+52*(self.1%69)+self.2%69)%69,
  164.             70=>(46*(self.0%70)+16*(self.1%70)+self.2%70)%70,
  165.             71=>(29*(self.0%71)+10*(self.1%71)+self.2%71)%71,
  166.             72=>(40*(self.0%72)+16*(self.1%72)+self.2%72)%72,
  167.             73=>(4*(self.0%73)+2*(self.1%73)+self.2%73)%73,
  168.             74=>(70*(self.0%74)+12*(self.1%74)+self.2%74)%74,
  169.             75=>(31*(self.0%75)+16*(self.1%75)+self.2%75)%75,
  170.             76=>(4*(self.0%76)+36*(self.1%76)+self.2%76)%76,
  171.             77=>(25*(self.0%77)+16*(self.1%77)+self.2%77)%77,
  172.             78=>(22*(self.0%78)+16*(self.1%78)+self.2%78)%78,
  173.             79=>(73*(self.0%79)+51*(self.1%79)+self.2%79)%79,
  174.             80=>(16*(self.0%80)+16*(self.1%80)+self.2%80)%80,
  175.             81=>(31*(self.0%81)+52*(self.1%81)+self.2%81)%81,
  176.             82=>(10*(self.0%82)+16*(self.1%82)+self.2%82)%82,
  177.             83=>(51*(self.0%83)+36*(self.1%83)+self.2%83)%83,
  178.             84=>(4*(self.0%84)+16*(self.1%84)+self.2%84)%84,
  179.             85=>(1*(self.0%85)+1*(self.1%85)+self.2%85)%85,
  180.             86=>(4*(self.0%86)+84*(self.1%86)+self.2%86)%86,
  181.             87=>(25*(self.0%87)+82*(self.1%87)+self.2%87)%87,
  182.             88=>(80*(self.0%88)+16*(self.1%88)+self.2%88)%88,
  183.             89=>(39*(self.0%89)+67*(self.1%89)+self.2%89)%89,
  184.             90=>(76*(self.0%90)+16*(self.1%90)+self.2%90)%90,
  185.             91=>(74*(self.0%91)+16*(self.1%91)+self.2%91)%91,
  186.             92=>(36*(self.0%92)+52*(self.1%92)+self.2%92)%92,
  187.             93=>(70*(self.0%93)+16*(self.1%93)+self.2%93)%93,
  188.             94=>(14*(self.0%94)+72*(self.1%94)+self.2%94)%94,
  189.             95=>(61*(self.0%95)+36*(self.1%95)+self.2%95)%95,
  190.             96=>(64*(self.0%96)+64*(self.1%96)+self.2%96)%96,
  191.             97=>(35*(self.0%97)+61*(self.1%97)+self.2%97)%97,
  192.             98=>(4*(self.0%98)+2*(self.1%98)+self.2%98)%98,
  193.             99=>(58*(self.0%99)+16*(self.1%99)+self.2%99)%99,
  194.             100=>(56*(self.0%100)+16*(self.1%100)+self.2%100)%100,
  195.             101=>(80*(self.0%101)+79*(self.1%101)+self.2%101)%101,
  196.             102=>(52*(self.0%102)+52*(self.1%102)+self.2%102)%102,
  197.             103=>(38*(self.0%103)+55*(self.1%103)+self.2%103)%103,
  198.             104=>(48*(self.0%104)+16*(self.1%104)+self.2%104)%104,
  199.             105=>(46*(self.0%105)+16*(self.1%105)+self.2%105)%105,
  200.             106=>(66*(self.0%106)+68*(self.1%106)+self.2%106)%106,
  201.             107=>(11*(self.0%107)+92*(self.1%107)+self.2%107)%107,
  202.             108=>(4*(self.0%108)+52*(self.1%108)+self.2%108)%108,
  203.             109=>(105*(self.0%109)+66*(self.1%109)+self.2%109)%109,
  204.             110=>(36*(self.0%110)+16*(self.1%110)+self.2%110)%110,
  205.             111=>(70*(self.0%111)+49*(self.1%111)+self.2%111)%111,
  206.             112=>(32*(self.0%112)+16*(self.1%112)+self.2%112)%112,
  207.             113=>(109*(self.0%113)+30*(self.1%113)+self.2%113)%113,
  208.             114=>(4*(self.0%114)+112*(self.1%114)+self.2%114)%114,
  209.             115=>(36*(self.0%115)+6*(self.1%115)+self.2%115)%115,
  210.             116=>(112*(self.0%116)+24*(self.1%116)+self.2%116)%116,
  211.             117=>(22*(self.0%117)+16*(self.1%117)+self.2%117)%117,
  212.             118=>(84*(self.0%118)+64*(self.1%118)+self.2%118)%118,
  213.             119=>(18*(self.0%119)+86*(self.1%119)+self.2%119)%119,
  214.             120=>(16*(self.0%120)+16*(self.1%120)+self.2%120)%120,
  215.             121=>(58*(self.0%121)+93*(self.1%121)+self.2%121)%121,
  216.             122=>(12*(self.0%122)+16*(self.1%122)+self.2%122)%122,
  217.             123=>(10*(self.0%123)+16*(self.1%123)+self.2%123)%123,
  218.             124=>(8*(self.0%124)+16*(self.1%124)+self.2%124)%124,
  219.             125=>(81*(self.0%125)+116*(self.1%125)+self.2%125)%125,
  220.             126=>(4*(self.0%126)+16*(self.1%126)+self.2%126)%126,
  221.             127=>(4*(self.0%127)+2*(self.1%127)+self.2%127)%127,
  222.             128=>(0*(self.0%128)+0*(self.1%128)+self.2%128)%128,
  223.             129=>(4*(self.0%129)+127*(self.1%129)+self.2%129)%129,
  224.             130=>(126*(self.0%130)+16*(self.1%130)+self.2%130)%130,
  225.             131=>(33*(self.0%131)+65*(self.1%131)+self.2%131)%131,
  226.             132=>(124*(self.0%132)+16*(self.1%132)+self.2%132)%132,
  227.             133=>(4*(self.0%133)+93*(self.1%133)+self.2%133)%133,
  228.             134=>(88*(self.0%134)+84*(self.1%134)+self.2%134)%134,
  229.             135=>(31*(self.0%135)+106*(self.1%135)+self.2%135)%135,
  230.             136=>(120*(self.0%136)+120*(self.1%136)+self.2%136)%136,
  231.             137=>(38*(self.0%137)+60*(self.1%137)+self.2%137)%137,
  232.             138=>(82*(self.0%138)+52*(self.1%138)+self.2%138)%138,
  233.             139=>(30*(self.0%139)+13*(self.1%139)+self.2%139)%139,
  234.             140=>(116*(self.0%140)+16*(self.1%140)+self.2%140)%140,
  235.             141=>(61*(self.0%141)+25*(self.1%141)+self.2%141)%141,
  236.             142=>(100*(self.0%142)+10*(self.1%142)+self.2%142)%142,
  237.             143=>(113*(self.0%143)+16*(self.1%143)+self.2%143)%143,
  238.             144=>(112*(self.0%144)+16*(self.1%144)+self.2%144)%144,
  239.             145=>(141*(self.0%145)+111*(self.1%145)+self.2%145)%145,
  240.             146=>(4*(self.0%146)+2*(self.1%146)+self.2%146)%146,
  241.             147=>(4*(self.0%147)+100*(self.1%147)+self.2%147)%147,
  242.             148=>(144*(self.0%148)+12*(self.1%148)+self.2%148)%148,
  243.             149=>(123*(self.0%149)+102*(self.1%149)+self.2%149)%149,
  244.             150=>(106*(self.0%150)+16*(self.1%150)+self.2%150)%150,
  245.             151=>(105*(self.0%151)+16*(self.1%151)+self.2%151)%151,
  246.             152=>(80*(self.0%152)+112*(self.1%152)+self.2%152)%152,
  247.             153=>(103*(self.0%153)+52*(self.1%153)+self.2%153)%153,
  248.             154=>(102*(self.0%154)+16*(self.1%154)+self.2%154)%154,
  249.             155=>(101*(self.0%155)+16*(self.1%155)+self.2%155)%155,
  250.             156=>(100*(self.0%156)+16*(self.1%156)+self.2%156)%156,
  251.             157=>(39*(self.0%157)+14*(self.1%157)+self.2%157)%157,
  252.             158=>(152*(self.0%158)+130*(self.1%158)+self.2%158)%158,
  253.             159=>(13*(self.0%159)+121*(self.1%159)+self.2%159)%159,
  254.             160=>(96*(self.0%160)+96*(self.1%160)+self.2%160)%160,
  255.             161=>(151*(self.0%161)+121*(self.1%161)+self.2%161)%161,
  256.             162=>(112*(self.0%162)+52*(self.1%162)+self.2%162)%162,
  257.             163=>(152*(self.0%163)+57*(self.1%163)+self.2%163)%163,
  258.             164=>(92*(self.0%164)+16*(self.1%164)+self.2%164)%164,
  259.             165=>(91*(self.0%165)+16*(self.1%165)+self.2%165)%165,
  260.             166=>(134*(self.0%166)+36*(self.1%166)+self.2%166)%166,
  261.             167=>(63*(self.0%167)+49*(self.1%167)+self.2%167)%167,
  262.             168=>(88*(self.0%168)+16*(self.1%168)+self.2%168)%168,
  263.             169=>(48*(self.0%169)+94*(self.1%169)+self.2%169)%169,
  264.             170=>(86*(self.0%170)+86*(self.1%170)+self.2%170)%170,
  265.             171=>(4*(self.0%171)+169*(self.1%171)+self.2%171)%171,
  266.             172=>(4*(self.0%172)+84*(self.1%172)+self.2%172)%172,
  267.             173=>(133*(self.0%173)+47*(self.1%173)+self.2%173)%173,
  268.             174=>(112*(self.0%174)+82*(self.1%174)+self.2%174)%174,
  269.             175=>(81*(self.0%175)+16*(self.1%175)+self.2%175)%175,
  270.             176=>(80*(self.0%176)+16*(self.1%176)+self.2%176)%176,
  271.             177=>(25*(self.0%177)+64*(self.1%177)+self.2%177)%177,
  272.             178=>(128*(self.0%178)+156*(self.1%178)+self.2%178)%178,
  273.             179=>(161*(self.0%179)+124*(self.1%179)+self.2%179)%179,
  274.             180=>(76*(self.0%180)+16*(self.1%180)+self.2%180)%180,
  275.             181=>(126*(self.0%181)+44*(self.1%181)+self.2%181)%181,
  276.             182=>(74*(self.0%182)+16*(self.1%182)+self.2%182)%182,
  277.             183=>(73*(self.0%183)+16*(self.1%183)+self.2%183)%183,
  278.             184=>(128*(self.0%184)+144*(self.1%184)+self.2%184)%184,
  279.             185=>(181*(self.0%185)+86*(self.1%185)+self.2%185)%185,
  280.             186=>(70*(self.0%186)+16*(self.1%186)+self.2%186)%186,
  281.             187=>(69*(self.0%187)+137*(self.1%187)+self.2%187)%187,
  282.             188=>(108*(self.0%188)+72*(self.1%188)+self.2%188)%188,
  283.             189=>(4*(self.0%189)+79*(self.1%189)+self.2%189)%189,
  284.             190=>(156*(self.0%190)+36*(self.1%190)+self.2%190)%190,
  285.             191=>(103*(self.0%191)+26*(self.1%191)+self.2%191)%191,
  286.             192=>(64*(self.0%192)+64*(self.1%192)+self.2%192)%192,
  287.             193=>(108*(self.0%193)+84*(self.1%193)+self.2%193)%193,
  288.             194=>(132*(self.0%194)+158*(self.1%194)+self.2%194)%194,
  289.             195=>(61*(self.0%195)+16*(self.1%195)+self.2%195)%195,
  290.             196=>(4*(self.0%196)+100*(self.1%196)+self.2%196)%196,
  291.             197=>(175*(self.0%197)+61*(self.1%197)+self.2%197)%197,
  292.             198=>(58*(self.0%198)+16*(self.1%198)+self.2%198)%198,
  293.             199=>(155*(self.0%199)+126*(self.1%199)+self.2%199)%199,
  294.             211=>(119*(self.0%211)+69*(self.1%211)+self.2%211)%211,
  295.             223=>(171*(self.0%223)+49*(self.1%223)+self.2%223)%223,
  296.             227=>(147*(self.0%227)+104*(self.1%227)+self.2%227)%227,
  297.             229=>(104*(self.0%229)+44*(self.1%229)+self.2%229)%229,
  298.             233=>(135*(self.0%233)+64*(self.1%233)+self.2%233)%233,
  299.             239=>(34*(self.0%239)+150*(self.1%239)+self.2%239)%239,
  300.             241=>(15*(self.0%241)+225*(self.1%241)+self.2%241)%241,
  301.             243=>(193*(self.0%243)+133*(self.1%243)+self.2%243)%243,
  302.             251=>(243*(self.0%251)+69*(self.1%251)+self.2%251)%251,
  303.             256=>(0*(self.0%256)+0*(self.1%256)+self.2%256)%256,
  304.             257=>(1*(self.0%257)+1*(self.1%257)+self.2%257)%257,
  305.             263=>(33*(self.0%263)+104*(self.1%263)+self.2%263)%263,
  306.             269=>(21*(self.0%269)+57*(self.1%269)+self.2%269)%269,
  307.             271=>(36*(self.0%271)+265*(self.1%271)+self.2%271)%271,
  308.             277=>(155*(self.0%277)+175*(self.1%277)+self.2%277)%277,
  309.             281=>(85*(self.0%281)+101*(self.1%281)+self.2%281)%281,
  310.             283=>(151*(self.0%283)+240*(self.1%283)+self.2%283)%283,
  311.             289=>(35*(self.0%289)+18*(self.1%289)+self.2%289)%289,
  312.             293=>(161*(self.0%293)+109*(self.1%293)+self.2%293)%293,
  313.             307=>(199*(self.0%307)+97*(self.1%307)+self.2%307)%307,
  314.             311=>(35*(self.0%311)+208*(self.1%311)+self.2%311)%311,
  315.             313=>(132*(self.0%313)+142*(self.1%313)+self.2%313)%313,
  316.             317=>(235*(self.0%317)+251*(self.1%317)+self.2%317)%317,
  317.             331=>(256*(self.0%331)+16*(self.1%331)+self.2%331)%331,
  318.             337=>(4*(self.0%337)+2*(self.1%337)+self.2%337)%337,
  319.             343=>(151*(self.0%343)+296*(self.1%343)+self.2%343)%343,
  320.             347=>(129*(self.0%347)+167*(self.1%347)+self.2%347)%347,
  321.             349=>(148*(self.0%349)+219*(self.1%349)+self.2%349)%349,
  322.             353=>(22*(self.0%353)+187*(self.1%353)+self.2%353)%353,
  323.             359=>(264*(self.0%359)+303*(self.1%359)+self.2%359)%359,
  324.             361=>(156*(self.0%361)+321*(self.1%361)+self.2%361)%361,
  325.             367=>(129*(self.0%367)+297*(self.1%367)+self.2%367)%367,
  326.             373=>(68*(self.0%373)+21*(self.1%373)+self.2%373)%373,
  327.             379=>(171*(self.0%379)+277*(self.1%379)+self.2%379)%379,
  328.             383=>(150*(self.0%383)+143*(self.1%383)+self.2%383)%383,
  329.             389=>(164*(self.0%389)+169*(self.1%389)+self.2%389)%389,
  330.             397=>(273*(self.0%397)+99*(self.1%397)+self.2%397)%397,
  331.             401=>(360*(self.0%401)+63*(self.1%401)+self.2%401)%401,
  332.             409=>(265*(self.0%409)+80*(self.1%409)+self.2%409)%409,
  333.             419=>(100*(self.0%419)+409*(self.1%419)+self.2%419)%419,
  334.             421=>(255*(self.0%421)+26*(self.1%421)+self.2%421)%421,
  335.             431=>(216*(self.0%431)+337*(self.1%431)+self.2%431)%431,
  336.             433=>(150*(self.0%433)+296*(self.1%433)+self.2%433)%433,
  337.             439=>(36*(self.0%439)+433*(self.1%439)+self.2%439)%439,
  338.             443=>(153*(self.0%443)+215*(self.1%443)+self.2%443)%443,
  339.             449=>(18*(self.0%449)+359*(self.1%449)+self.2%449)%449,
  340.             457=>(68*(self.0%457)+215*(self.1%457)+self.2%457)%457,
  341.             461=>(444*(self.0%461)+370*(self.1%461)+self.2%461)%461,
  342.             463=>(60*(self.0%463)+261*(self.1%463)+self.2%463)%463,
  343.             467=>(264*(self.0%467)+369*(self.1%467)+self.2%467)%467,
  344.             479=>(28*(self.0%479)+403*(self.1%479)+self.2%479)%479,
  345.             487=>(467*(self.0%487)+286*(self.1%487)+self.2%487)%487,
  346.             491=>(429*(self.0%491)+263*(self.1%491)+self.2%491)%491,
  347.             499=>(462*(self.0%499)+31*(self.1%499)+self.2%499)%499,
  348.             _=>2
  349.         }) as usize
  350.     }
  351. }
  352. type BIG=BigUInt;
  353. #[inline]
  354. fn gcd(i:u32,j:BIG)->u32{//ensure i<j for better performance
  355.     let (mut i,mut j)=(j.rem(i as u32) as u32,i);
  356.     while i != 0{
  357.         let t=j%i;
  358.         j=i;
  359.         i=t;
  360.     }
  361.     j
  362. }
  363. fn search_roll(b:Vec<BIG>,ix:u32,mut repeats:BIG)->(Vec<BIG>,BIG){
  364.     let i=ix/gcd(ix,repeats);
  365.     let b=if i>1{b.into_iter().map(|x|(0..i).map(|c|x.expand(repeats,c as u128)).filter(|x|ISPRIME[x.rem(ix)]).collect::<Vec<_>>()).flatten().collect::<Vec<_>>()}else{b};
  366.     if i>1 {repeats=repeats.mul(i as u128)}
  367.     (b,repeats)
  368. }
  369. fn search_once(b:&[BIG],mut upper:u32)->u32{
  370.     let mut c=b.into_iter();
  371.     c.next();
  372.     let mut gg=vec![109,113,127,131,137,139,149,151,157,163,167];
  373.     let mut rem=vec![173,178,179,181,191,193,194,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293];
  374.     let mut h=rem.drain(..);
  375.     while let Some(hh)=h.next(){
  376.         gg.push(hh);
  377.         if hh>=upper{break}
  378.     }
  379.     for i in c{
  380.         while gg.iter().copied().all(|t|ISPRIME[i.rem(t)]){
  381.             upper=h.next().unwrap();
  382.             println!("found number= {:?} for n<{}!",i,upper);
  383.             gg.push(upper);
  384.         }
  385.     }
  386.     upper
  387. }
复制代码

tuneing const
  1. #![feature(const_int_pow)]
  2. /*
  3. LENGTH=500
  4. a=[True]*(LENGTH+1)
  5. a[0]=a[1]=False
  6. for i in range(2,LENGTH+1):
  7.   if a[i]:
  8.     for j in range(2,(LENGTH//i)+1):
  9.       a[i*j]=False

  10. print(("const ISPRIME:[bool;%d]= "%(LENGTH+1))+str(a).lower().replace(" ","")+";")
  11. [n for n,b in enumerate(a) if b]
  12. aa=[a for a in a]
  13. for i in [n for n,b in enumerate(a) if b]:
  14.   j=i*i;
  15.   while j<=LENGTH:
  16.     aa[j]=True
  17.     j*=i

  18. for i in range(1,200):
  19.     aa[i]=True

  20. #for u32
  21. print("\n".join(["N=>(self.5%N+N1*(self.4%N)+N2*(self.3%N)+N3*(self.2%N)+N4*(self.1%N)+N5*(self.0%N))%N,".replace("N5",str(2**(32*5)%n)).replace("N4",str(2**(32*4)%n)).replace("N3",str(2**(32*3)%n)).replace("N2",str(2**(32*2)%n)).replace("N1",str(2**32%n)).replace("N",str(n)) for n,b in enumerate(aa) if b]))
  22. #for u64 array
  23. print("\n".join(["            N=>(N2*((self.0)[0]%N)+N1*((self.0)[1]%N)+(self.0)[2]%N)%N,".replace("N2",str(2**(64*2)%n)).replace("N1",str(2**64%n)).replace("N",str(n)) for n,b in enumerate(aa) if b]))
  24. #for u64
  25. print("\n".join(["            N=>(N2*(self.0%N)+N1*(self.1%N)+self.2%N)%N,".replace("N2",str(2**(64*2)%n)).replace("N1",str(2**64%n)).replace("N",str(n)) for n,b in enumerate(aa) if b]))
  26. print("\n".join(["            N=>(N3*(self.0%N)+N2*(self.1%N)+N1*(self.2%N)+self.3%N)%N,".replace("N3",str(2**(64*3)%n)).replace("N2",str(2**(64*2)%n)).replace("N1",str(2**64%n)).replace("N",str(n)) for n,b in enumerate(aa) if b]))

  27. */
  28. const ISPRIME:[bool;501]= [false,false,true,true,false,true,false,true,false,false,false,true,false,true,false,false,false,true,false,true,false,false,false,true,false,false,false,false,false,true,false,true,false,false,false,false,false,true,false,false,false,true,false,true,false,false,false,true,false,false,false,false,false,true,false,false,false,false,false,true,false,true,false,false,false,false,false,true,false,false,false,true,false,true,false,false,false,false,false,true,false,false,false,true,false,false,false,false,false,true,false,false,false,false,false,false,false,true,false,false,false,true,false,true,false,false,false,true,false,true,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,true,false,false,false,false,false,true,false,true,false,false,false,false,false,false,false,false,false,true,false,true,false,false,false,false,false,true,false,false,false,false,false,true,false,false,false,true,false,false,false,false,false,true,false,false,false,false,false,true,false,true,false,false,false,false,false,false,false,false,false,true,false,true,false,false,false,true,false,true,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,true,false,true,false,false,false,true,false,false,false,false,false,true,false,true,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,true,false,false,false,false,false,true,false,false,false,false,false,true,false,true,false,false,false,false,false,true,false,false,false,true,false,true,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,true,false,true,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,true,false,true,false,false,false,true,false,false,false,false,false,true,false,false,false,false,false,false,false,true,false,false,false,false,false,true,false,false,false,false,false,true,false,false,false,true,false,false,false,false,false,true,false,false,false,false,false,false,false,true,false,false,false,true,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,true,false,true,false,false,false,false,false,false,false,false,false,true,false,true,false,false,false,false,false,true,false,false,false,true,false,false,false,false,false,true,false,false,false,false,false,false,false,true,false,false,false,true,false,true,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,true,false,false,false,true,false,false,false,false,false,false,false,true,false];
  29. const UPPER:u32=180;
  30. const HALF:u32=(UPPER>>1)+1;
  31. const TO:u32=109;
  32. fn main(){
  33.     let mut lcm=BigUInt(0,0,2);
  34.     for i in 3..HALF{
  35.         lcm=lcm.mul((i/gcd(i,lcm)) as u128)
  36.     }
  37.     let mut x=(vec![BigUInt(0,0,2)],lcm);
  38.     //x=search_roll(x.0,81,x.1);//3
  39.     //x=search_roll(x.0,49,x.1);//7
  40.     x=search_roll(x.0,121,x.1);//11
  41.     x=search_roll(x.0,125,x.1);//2
  42.     x=search_roll(x.0,128,x.1);//5
  43.     x=search_roll(x.0,169,x.1);//13
  44.     //x=search_roll(x.0,243,x.1);//3
  45.     //x=search_roll(x.0,289,x.1);//17
  46.     //x=search_roll(x.0,343,x.1);//7
  47.     for i in HALF..=TO{
  48.         x=search_roll(x.0,i,x.1);
  49.         println!("i={},len={},rep={:?}",i,(x.0).len(),x.1);
  50.         if (x.0).len()>10000000{println!("break at i={},TO={}",i,TO);break}
  51.     }
  52.     println!("SHOULD check `TO` and `i` carefully!");
  53.     let (mut b,lcm)=x;
  54.     b.sort_unstable();
  55.     let mut upper=search_once(&b,179);
  56.     for i in 0..10{
  57.         println!("loop{} finished",i);
  58.         b.iter_mut().for_each(|x|*x=x.add(lcm));
  59.         upper=search_once(&b,upper);
  60.     }
  61. }
  62. #[derive(Clone,Copy,Debug,Ord,Eq,PartialEq,PartialOrd)]
  63. struct BigUInt(u64,u64,u64);
  64. impl BigUInt{
  65.     #[inline]
  66.     pub fn add(self,other:Self)->Self{
  67.         //self+other
  68.         let l0=self.2 as u128  + other.2 as u128;
  69.         let (l0,g)=(l0 as u64,l0>>64);
  70.         let l1=self.1 as u128+g+other.1 as u128;
  71.         let (l1,g)=(l1 as u64,l1>>64);
  72.         BigUInt(self.0+g as u64+other.0 as u64,l1,l0)
  73.     }
  74.     #[inline]
  75.     pub fn expand(self,other:Self,b:u128)->Self{
  76.         //self+other*b
  77.         let l0=self.2 as u128  +(other.2 as u128)*b;
  78.         let (l0,g)=(l0 as u64,l0>>64);
  79.         let l1=self.1 as u128+g+(other.1 as u128)*b;
  80.         let (l1,g)=(l1 as u64,l1>>64);
  81.         BigUInt(self.0+g as u64+other.0*b as u64,l1,l0)
  82.     }
  83.     #[inline]
  84.     pub fn mul(self,b:u128)->Self{
  85.         //self*b
  86.         let l0=  (self.2 as u128)*b;
  87.         let (l0,g)=(l0 as u64,l0>>64);
  88.         let l1=g+(self.1 as u128)*b;
  89.         let (l1,g)=(l1 as u64,l1>>64);
  90.         BigUInt(g as u64+self.0*b as u64,l1,l0)
  91.     }
  92.     #[inline]
  93.     pub fn rem(self,b:u32)->usize{
  94.         (match b{
  95.             1=>0,
  96.             2=>(0*(self.0%2)+0*(self.1%2)+self.2%2)%2,
  97.             3=>(1*(self.0%3)+1*(self.1%3)+self.2%3)%3,
  98.             4=>(0*(self.0%4)+0*(self.1%4)+self.2%4)%4,
  99.             5=>(1*(self.0%5)+1*(self.1%5)+self.2%5)%5,
  100.             6=>(4*(self.0%6)+4*(self.1%6)+self.2%6)%6,
  101.             7=>(4*(self.0%7)+2*(self.1%7)+self.2%7)%7,
  102.             8=>(0*(self.0%8)+0*(self.1%8)+self.2%8)%8,
  103.             9=>(4*(self.0%9)+7*(self.1%9)+self.2%9)%9,
  104.             10=>(6*(self.0%10)+6*(self.1%10)+self.2%10)%10,
  105.             11=>(3*(self.0%11)+5*(self.1%11)+self.2%11)%11,
  106.             12=>(4*(self.0%12)+4*(self.1%12)+self.2%12)%12,
  107.             13=>(9*(self.0%13)+3*(self.1%13)+self.2%13)%13,
  108.             14=>(4*(self.0%14)+2*(self.1%14)+self.2%14)%14,
  109.             15=>(1*(self.0%15)+1*(self.1%15)+self.2%15)%15,
  110.             16=>(0*(self.0%16)+0*(self.1%16)+self.2%16)%16,
  111.             17=>(1*(self.0%17)+1*(self.1%17)+self.2%17)%17,
  112.             18=>(4*(self.0%18)+16*(self.1%18)+self.2%18)%18,
  113.             19=>(4*(self.0%19)+17*(self.1%19)+self.2%19)%19,
  114.             20=>(16*(self.0%20)+16*(self.1%20)+self.2%20)%20,
  115.             21=>(4*(self.0%21)+16*(self.1%21)+self.2%21)%21,
  116.             22=>(14*(self.0%22)+16*(self.1%22)+self.2%22)%22,
  117.             23=>(13*(self.0%23)+6*(self.1%23)+self.2%23)%23,
  118.             24=>(16*(self.0%24)+16*(self.1%24)+self.2%24)%24,
  119.             25=>(6*(self.0%25)+16*(self.1%25)+self.2%25)%25,
  120.             26=>(22*(self.0%26)+16*(self.1%26)+self.2%26)%26,
  121.             27=>(4*(self.0%27)+25*(self.1%27)+self.2%27)%27,
  122.             28=>(4*(self.0%28)+16*(self.1%28)+self.2%28)%28,
  123.             29=>(25*(self.0%29)+24*(self.1%29)+self.2%29)%29,
  124.             30=>(16*(self.0%30)+16*(self.1%30)+self.2%30)%30,
  125.             31=>(8*(self.0%31)+16*(self.1%31)+self.2%31)%31,
  126.             32=>(0*(self.0%32)+0*(self.1%32)+self.2%32)%32,
  127.             33=>(25*(self.0%33)+16*(self.1%33)+self.2%33)%33,
  128.             34=>(18*(self.0%34)+18*(self.1%34)+self.2%34)%34,
  129.             35=>(11*(self.0%35)+16*(self.1%35)+self.2%35)%35,
  130.             36=>(4*(self.0%36)+16*(self.1%36)+self.2%36)%36,
  131.             37=>(33*(self.0%37)+12*(self.1%37)+self.2%37)%37,
  132.             38=>(4*(self.0%38)+36*(self.1%38)+self.2%38)%38,
  133.             39=>(22*(self.0%39)+16*(self.1%39)+self.2%39)%39,
  134.             40=>(16*(self.0%40)+16*(self.1%40)+self.2%40)%40,
  135.             41=>(10*(self.0%41)+16*(self.1%41)+self.2%41)%41,
  136.             42=>(4*(self.0%42)+16*(self.1%42)+self.2%42)%42,
  137.             43=>(4*(self.0%43)+41*(self.1%43)+self.2%43)%43,
  138.             44=>(36*(self.0%44)+16*(self.1%44)+self.2%44)%44,
  139.             45=>(31*(self.0%45)+16*(self.1%45)+self.2%45)%45,
  140.             46=>(36*(self.0%46)+6*(self.1%46)+self.2%46)%46,
  141.             47=>(14*(self.0%47)+25*(self.1%47)+self.2%47)%47,
  142.             48=>(16*(self.0%48)+16*(self.1%48)+self.2%48)%48,
  143.             49=>(4*(self.0%49)+2*(self.1%49)+self.2%49)%49,
  144.             50=>(6*(self.0%50)+16*(self.1%50)+self.2%50)%50,
  145.             51=>(1*(self.0%51)+1*(self.1%51)+self.2%51)%51,
  146.             52=>(48*(self.0%52)+16*(self.1%52)+self.2%52)%52,
  147.             53=>(13*(self.0%53)+15*(self.1%53)+self.2%53)%53,
  148.             54=>(4*(self.0%54)+52*(self.1%54)+self.2%54)%54,
  149.             55=>(36*(self.0%55)+16*(self.1%55)+self.2%55)%55,
  150.             56=>(32*(self.0%56)+16*(self.1%56)+self.2%56)%56,
  151.             57=>(4*(self.0%57)+55*(self.1%57)+self.2%57)%57,
  152.             58=>(54*(self.0%58)+24*(self.1%58)+self.2%58)%58,
  153.             59=>(25*(self.0%59)+5*(self.1%59)+self.2%59)%59,
  154.             60=>(16*(self.0%60)+16*(self.1%60)+self.2%60)%60,
  155.             61=>(12*(self.0%61)+16*(self.1%61)+self.2%61)%61,
  156.             62=>(8*(self.0%62)+16*(self.1%62)+self.2%62)%62,
  157.             63=>(4*(self.0%63)+16*(self.1%63)+self.2%63)%63,
  158.             64=>(0*(self.0%64)+0*(self.1%64)+self.2%64)%64,
  159.             65=>(61*(self.0%65)+16*(self.1%65)+self.2%65)%65,
  160.             66=>(58*(self.0%66)+16*(self.1%66)+self.2%66)%66,
  161.             67=>(21*(self.0%67)+17*(self.1%67)+self.2%67)%67,
  162.             68=>(52*(self.0%68)+52*(self.1%68)+self.2%68)%68,
  163.             69=>(13*(self.0%69)+52*(self.1%69)+self.2%69)%69,
  164.             70=>(46*(self.0%70)+16*(self.1%70)+self.2%70)%70,
  165.             71=>(29*(self.0%71)+10*(self.1%71)+self.2%71)%71,
  166.             72=>(40*(self.0%72)+16*(self.1%72)+self.2%72)%72,
  167.             73=>(4*(self.0%73)+2*(self.1%73)+self.2%73)%73,
  168.             74=>(70*(self.0%74)+12*(self.1%74)+self.2%74)%74,
  169.             75=>(31*(self.0%75)+16*(self.1%75)+self.2%75)%75,
  170.             76=>(4*(self.0%76)+36*(self.1%76)+self.2%76)%76,
  171.             77=>(25*(self.0%77)+16*(self.1%77)+self.2%77)%77,
  172.             78=>(22*(self.0%78)+16*(self.1%78)+self.2%78)%78,
  173.             79=>(73*(self.0%79)+51*(self.1%79)+self.2%79)%79,
  174.             80=>(16*(self.0%80)+16*(self.1%80)+self.2%80)%80,
  175.             81=>(31*(self.0%81)+52*(self.1%81)+self.2%81)%81,
  176.             82=>(10*(self.0%82)+16*(self.1%82)+self.2%82)%82,
  177.             83=>(51*(self.0%83)+36*(self.1%83)+self.2%83)%83,
  178.             84=>(4*(self.0%84)+16*(self.1%84)+self.2%84)%84,
  179.             85=>(1*(self.0%85)+1*(self.1%85)+self.2%85)%85,
  180.             86=>(4*(self.0%86)+84*(self.1%86)+self.2%86)%86,
  181.             87=>(25*(self.0%87)+82*(self.1%87)+self.2%87)%87,
  182.             88=>(80*(self.0%88)+16*(self.1%88)+self.2%88)%88,
  183.             89=>(39*(self.0%89)+67*(self.1%89)+self.2%89)%89,
  184.             90=>(76*(self.0%90)+16*(self.1%90)+self.2%90)%90,
  185.             91=>(74*(self.0%91)+16*(self.1%91)+self.2%91)%91,
  186.             92=>(36*(self.0%92)+52*(self.1%92)+self.2%92)%92,
  187.             93=>(70*(self.0%93)+16*(self.1%93)+self.2%93)%93,
  188.             94=>(14*(self.0%94)+72*(self.1%94)+self.2%94)%94,
  189.             95=>(61*(self.0%95)+36*(self.1%95)+self.2%95)%95,
  190.             96=>(64*(self.0%96)+64*(self.1%96)+self.2%96)%96,
  191.             97=>(35*(self.0%97)+61*(self.1%97)+self.2%97)%97,
  192.             98=>(4*(self.0%98)+2*(self.1%98)+self.2%98)%98,
  193.             99=>(58*(self.0%99)+16*(self.1%99)+self.2%99)%99,
  194.             100=>(56*(self.0%100)+16*(self.1%100)+self.2%100)%100,
  195.             101=>(80*(self.0%101)+79*(self.1%101)+self.2%101)%101,
  196.             102=>(52*(self.0%102)+52*(self.1%102)+self.2%102)%102,
  197.             103=>(38*(self.0%103)+55*(self.1%103)+self.2%103)%103,
  198.             104=>(48*(self.0%104)+16*(self.1%104)+self.2%104)%104,
  199.             105=>(46*(self.0%105)+16*(self.1%105)+self.2%105)%105,
  200.             106=>(66*(self.0%106)+68*(self.1%106)+self.2%106)%106,
  201.             107=>(11*(self.0%107)+92*(self.1%107)+self.2%107)%107,
  202.             108=>(4*(self.0%108)+52*(self.1%108)+self.2%108)%108,
  203.             109=>(105*(self.0%109)+66*(self.1%109)+self.2%109)%109,
  204.             110=>(36*(self.0%110)+16*(self.1%110)+self.2%110)%110,
  205.             111=>(70*(self.0%111)+49*(self.1%111)+self.2%111)%111,
  206.             112=>(32*(self.0%112)+16*(self.1%112)+self.2%112)%112,
  207.             113=>(109*(self.0%113)+30*(self.1%113)+self.2%113)%113,
  208.             114=>(4*(self.0%114)+112*(self.1%114)+self.2%114)%114,
  209.             115=>(36*(self.0%115)+6*(self.1%115)+self.2%115)%115,
  210.             116=>(112*(self.0%116)+24*(self.1%116)+self.2%116)%116,
  211.             117=>(22*(self.0%117)+16*(self.1%117)+self.2%117)%117,
  212.             118=>(84*(self.0%118)+64*(self.1%118)+self.2%118)%118,
  213.             119=>(18*(self.0%119)+86*(self.1%119)+self.2%119)%119,
  214.             120=>(16*(self.0%120)+16*(self.1%120)+self.2%120)%120,
  215.             121=>(58*(self.0%121)+93*(self.1%121)+self.2%121)%121,
  216.             122=>(12*(self.0%122)+16*(self.1%122)+self.2%122)%122,
  217.             123=>(10*(self.0%123)+16*(self.1%123)+self.2%123)%123,
  218.             124=>(8*(self.0%124)+16*(self.1%124)+self.2%124)%124,
  219.             125=>(81*(self.0%125)+116*(self.1%125)+self.2%125)%125,
  220.             126=>(4*(self.0%126)+16*(self.1%126)+self.2%126)%126,
  221.             127=>(4*(self.0%127)+2*(self.1%127)+self.2%127)%127,
  222.             128=>(0*(self.0%128)+0*(self.1%128)+self.2%128)%128,
  223.             129=>(4*(self.0%129)+127*(self.1%129)+self.2%129)%129,
  224.             130=>(126*(self.0%130)+16*(self.1%130)+self.2%130)%130,
  225.             131=>(33*(self.0%131)+65*(self.1%131)+self.2%131)%131,
  226.             132=>(124*(self.0%132)+16*(self.1%132)+self.2%132)%132,
  227.             133=>(4*(self.0%133)+93*(self.1%133)+self.2%133)%133,
  228.             134=>(88*(self.0%134)+84*(self.1%134)+self.2%134)%134,
  229.             135=>(31*(self.0%135)+106*(self.1%135)+self.2%135)%135,
  230.             136=>(120*(self.0%136)+120*(self.1%136)+self.2%136)%136,
  231.             137=>(38*(self.0%137)+60*(self.1%137)+self.2%137)%137,
  232.             138=>(82*(self.0%138)+52*(self.1%138)+self.2%138)%138,
  233.             139=>(30*(self.0%139)+13*(self.1%139)+self.2%139)%139,
  234.             140=>(116*(self.0%140)+16*(self.1%140)+self.2%140)%140,
  235.             141=>(61*(self.0%141)+25*(self.1%141)+self.2%141)%141,
  236.             142=>(100*(self.0%142)+10*(self.1%142)+self.2%142)%142,
  237.             143=>(113*(self.0%143)+16*(self.1%143)+self.2%143)%143,
  238.             144=>(112*(self.0%144)+16*(self.1%144)+self.2%144)%144,
  239.             145=>(141*(self.0%145)+111*(self.1%145)+self.2%145)%145,
  240.             146=>(4*(self.0%146)+2*(self.1%146)+self.2%146)%146,
  241.             147=>(4*(self.0%147)+100*(self.1%147)+self.2%147)%147,
  242.             148=>(144*(self.0%148)+12*(self.1%148)+self.2%148)%148,
  243.             149=>(123*(self.0%149)+102*(self.1%149)+self.2%149)%149,
  244.             150=>(106*(self.0%150)+16*(self.1%150)+self.2%150)%150,
  245.             151=>(105*(self.0%151)+16*(self.1%151)+self.2%151)%151,
  246.             152=>(80*(self.0%152)+112*(self.1%152)+self.2%152)%152,
  247.             153=>(103*(self.0%153)+52*(self.1%153)+self.2%153)%153,
  248.             154=>(102*(self.0%154)+16*(self.1%154)+self.2%154)%154,
  249.             155=>(101*(self.0%155)+16*(self.1%155)+self.2%155)%155,
  250.             156=>(100*(self.0%156)+16*(self.1%156)+self.2%156)%156,
  251.             157=>(39*(self.0%157)+14*(self.1%157)+self.2%157)%157,
  252.             158=>(152*(self.0%158)+130*(self.1%158)+self.2%158)%158,
  253.             159=>(13*(self.0%159)+121*(self.1%159)+self.2%159)%159,
  254.             160=>(96*(self.0%160)+96*(self.1%160)+self.2%160)%160,
  255.             161=>(151*(self.0%161)+121*(self.1%161)+self.2%161)%161,
  256.             162=>(112*(self.0%162)+52*(self.1%162)+self.2%162)%162,
  257.             163=>(152*(self.0%163)+57*(self.1%163)+self.2%163)%163,
  258.             164=>(92*(self.0%164)+16*(self.1%164)+self.2%164)%164,
  259.             165=>(91*(self.0%165)+16*(self.1%165)+self.2%165)%165,
  260.             166=>(134*(self.0%166)+36*(self.1%166)+self.2%166)%166,
  261.             167=>(63*(self.0%167)+49*(self.1%167)+self.2%167)%167,
  262.             168=>(88*(self.0%168)+16*(self.1%168)+self.2%168)%168,
  263.             169=>(48*(self.0%169)+94*(self.1%169)+self.2%169)%169,
  264.             170=>(86*(self.0%170)+86*(self.1%170)+self.2%170)%170,
  265.             171=>(4*(self.0%171)+169*(self.1%171)+self.2%171)%171,
  266.             172=>(4*(self.0%172)+84*(self.1%172)+self.2%172)%172,
  267.             173=>(133*(self.0%173)+47*(self.1%173)+self.2%173)%173,
  268.             174=>(112*(self.0%174)+82*(self.1%174)+self.2%174)%174,
  269.             175=>(81*(self.0%175)+16*(self.1%175)+self.2%175)%175,
  270.             176=>(80*(self.0%176)+16*(self.1%176)+self.2%176)%176,
  271.             177=>(25*(self.0%177)+64*(self.1%177)+self.2%177)%177,
  272.             178=>(128*(self.0%178)+156*(self.1%178)+self.2%178)%178,
  273.             179=>(161*(self.0%179)+124*(self.1%179)+self.2%179)%179,
  274.             180=>(76*(self.0%180)+16*(self.1%180)+self.2%180)%180,
  275.             181=>(126*(self.0%181)+44*(self.1%181)+self.2%181)%181,
  276.             182=>(74*(self.0%182)+16*(self.1%182)+self.2%182)%182,
  277.             183=>(73*(self.0%183)+16*(self.1%183)+self.2%183)%183,
  278.             184=>(128*(self.0%184)+144*(self.1%184)+self.2%184)%184,
  279.             185=>(181*(self.0%185)+86*(self.1%185)+self.2%185)%185,
  280.             186=>(70*(self.0%186)+16*(self.1%186)+self.2%186)%186,
  281.             187=>(69*(self.0%187)+137*(self.1%187)+self.2%187)%187,
  282.             188=>(108*(self.0%188)+72*(self.1%188)+self.2%188)%188,
  283.             189=>(4*(self.0%189)+79*(self.1%189)+self.2%189)%189,
  284.             190=>(156*(self.0%190)+36*(self.1%190)+self.2%190)%190,
  285.             191=>(103*(self.0%191)+26*(self.1%191)+self.2%191)%191,
  286.             192=>(64*(self.0%192)+64*(self.1%192)+self.2%192)%192,
  287.             193=>(108*(self.0%193)+84*(self.1%193)+self.2%193)%193,
  288.             194=>(132*(self.0%194)+158*(self.1%194)+self.2%194)%194,
  289.             195=>(61*(self.0%195)+16*(self.1%195)+self.2%195)%195,
  290.             196=>(4*(self.0%196)+100*(self.1%196)+self.2%196)%196,
  291.             197=>(175*(self.0%197)+61*(self.1%197)+self.2%197)%197,
  292.             198=>(58*(self.0%198)+16*(self.1%198)+self.2%198)%198,
  293.             199=>(155*(self.0%199)+126*(self.1%199)+self.2%199)%199,
  294.             211=>(119*(self.0%211)+69*(self.1%211)+self.2%211)%211,
  295.             223=>(171*(self.0%223)+49*(self.1%223)+self.2%223)%223,
  296.             227=>(147*(self.0%227)+104*(self.1%227)+self.2%227)%227,
  297.             229=>(104*(self.0%229)+44*(self.1%229)+self.2%229)%229,
  298.             233=>(135*(self.0%233)+64*(self.1%233)+self.2%233)%233,
  299.             239=>(34*(self.0%239)+150*(self.1%239)+self.2%239)%239,
  300.             241=>(15*(self.0%241)+225*(self.1%241)+self.2%241)%241,
  301.             243=>(193*(self.0%243)+133*(self.1%243)+self.2%243)%243,
  302.             251=>(243*(self.0%251)+69*(self.1%251)+self.2%251)%251,
  303.             256=>(0*(self.0%256)+0*(self.1%256)+self.2%256)%256,
  304.             257=>(1*(self.0%257)+1*(self.1%257)+self.2%257)%257,
  305.             263=>(33*(self.0%263)+104*(self.1%263)+self.2%263)%263,
  306.             269=>(21*(self.0%269)+57*(self.1%269)+self.2%269)%269,
  307.             271=>(36*(self.0%271)+265*(self.1%271)+self.2%271)%271,
  308.             277=>(155*(self.0%277)+175*(self.1%277)+self.2%277)%277,
  309.             281=>(85*(self.0%281)+101*(self.1%281)+self.2%281)%281,
  310.             283=>(151*(self.0%283)+240*(self.1%283)+self.2%283)%283,
  311.             289=>(35*(self.0%289)+18*(self.1%289)+self.2%289)%289,
  312.             293=>(161*(self.0%293)+109*(self.1%293)+self.2%293)%293,
  313.             307=>(199*(self.0%307)+97*(self.1%307)+self.2%307)%307,
  314.             311=>(35*(self.0%311)+208*(self.1%311)+self.2%311)%311,
  315.             313=>(132*(self.0%313)+142*(self.1%313)+self.2%313)%313,
  316.             317=>(235*(self.0%317)+251*(self.1%317)+self.2%317)%317,
  317.             331=>(256*(self.0%331)+16*(self.1%331)+self.2%331)%331,
  318.             337=>(4*(self.0%337)+2*(self.1%337)+self.2%337)%337,
  319.             343=>(151*(self.0%343)+296*(self.1%343)+self.2%343)%343,
  320.             347=>(129*(self.0%347)+167*(self.1%347)+self.2%347)%347,
  321.             349=>(148*(self.0%349)+219*(self.1%349)+self.2%349)%349,
  322.             353=>(22*(self.0%353)+187*(self.1%353)+self.2%353)%353,
  323.             359=>(264*(self.0%359)+303*(self.1%359)+self.2%359)%359,
  324.             361=>(156*(self.0%361)+321*(self.1%361)+self.2%361)%361,
  325.             367=>(129*(self.0%367)+297*(self.1%367)+self.2%367)%367,
  326.             373=>(68*(self.0%373)+21*(self.1%373)+self.2%373)%373,
  327.             379=>(171*(self.0%379)+277*(self.1%379)+self.2%379)%379,
  328.             383=>(150*(self.0%383)+143*(self.1%383)+self.2%383)%383,
  329.             389=>(164*(self.0%389)+169*(self.1%389)+self.2%389)%389,
  330.             397=>(273*(self.0%397)+99*(self.1%397)+self.2%397)%397,
  331.             401=>(360*(self.0%401)+63*(self.1%401)+self.2%401)%401,
  332.             409=>(265*(self.0%409)+80*(self.1%409)+self.2%409)%409,
  333.             419=>(100*(self.0%419)+409*(self.1%419)+self.2%419)%419,
  334.             421=>(255*(self.0%421)+26*(self.1%421)+self.2%421)%421,
  335.             431=>(216*(self.0%431)+337*(self.1%431)+self.2%431)%431,
  336.             433=>(150*(self.0%433)+296*(self.1%433)+self.2%433)%433,
  337.             439=>(36*(self.0%439)+433*(self.1%439)+self.2%439)%439,
  338.             443=>(153*(self.0%443)+215*(self.1%443)+self.2%443)%443,
  339.             449=>(18*(self.0%449)+359*(self.1%449)+self.2%449)%449,
  340.             457=>(68*(self.0%457)+215*(self.1%457)+self.2%457)%457,
  341.             461=>(444*(self.0%461)+370*(self.1%461)+self.2%461)%461,
  342.             463=>(60*(self.0%463)+261*(self.1%463)+self.2%463)%463,
  343.             467=>(264*(self.0%467)+369*(self.1%467)+self.2%467)%467,
  344.             479=>(28*(self.0%479)+403*(self.1%479)+self.2%479)%479,
  345.             487=>(467*(self.0%487)+286*(self.1%487)+self.2%487)%487,
  346.             491=>(429*(self.0%491)+263*(self.1%491)+self.2%491)%491,
  347.             499=>(462*(self.0%499)+31*(self.1%499)+self.2%499)%499,
  348.             _=>2
  349.         }) as usize
  350.     }
  351. }
  352. type BIG=BigUInt;
  353. #[inline]
  354. fn gcd(i:u32,j:BIG)->u32{//ensure i<j for better performance
  355.     let (mut i,mut j)=(j.rem(i as u32) as u32,i);
  356.     while i != 0{
  357.         let t=j%i;
  358.         j=i;
  359.         i=t;
  360.     }
  361.     j
  362. }
  363. fn search_roll(b:Vec<BIG>,ix:u32,mut repeats:BIG)->(Vec<BIG>,BIG){
  364.     let i=ix/gcd(ix,repeats);
  365.     let b=if i>1{b.into_iter().map(|x|(0..i).map(|c|x.expand(repeats,c as u128)).filter(|x|ISPRIME[x.rem(ix)]).collect::<Vec<_>>()).flatten().collect::<Vec<_>>()}else{b};
  366.     if i>1 {repeats=repeats.mul(i as u128)}
  367.     (b,repeats)
  368. }
  369. fn search_once(b:&[BIG],mut upper:u32)->u32{
  370.     let mut c=b.into_iter();
  371.     c.next();
  372.     let mut gg=vec![113,127,131,137,139,149,151,157,163,167];
  373.     let mut rem=vec![173,178,179,181,191,193,194,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293];
  374.     let mut h=rem.drain(..);
  375.     while let Some(hh)=h.next(){
  376.         gg.push(hh);
  377.         if hh>=upper{break}
  378.     }
  379.     for i in c{
  380.         while gg.iter().copied().all(|t|ISPRIME[i.rem(t)]){
  381.             upper=h.next().unwrap();
  382.             println!("found number= {:?} for n<{}!",i,upper);
  383.             gg.push(upper);
  384.         }
  385.     }
  386.     upper
  387. }

复制代码


i=91,len=12,rep=BigUInt(3020, 9959018788447794178, 5950257633037103232)
i=92,len=12,rep=BigUInt(3020, 9959018788447794178, 5950257633037103232)
i=93,len=12,rep=BigUInt(3020, 9959018788447794178, 5950257633037103232)
i=94,len=12,rep=BigUInt(3020, 9959018788447794178, 5950257633037103232)
i=95,len=12,rep=BigUInt(3020, 9959018788447794178, 5950257633037103232)
i=96,len=12,rep=BigUInt(3020, 9959018788447794178, 5950257633037103232)
i=97,len=288,rep=BigUInt(292992, 6794130646539351265, 5325924119602913408)
i=98,len=288,rep=BigUInt(292992, 6794130646539351265, 5325924119602913408)
i=99,len=288,rep=BigUInt(292992, 6794130646539351265, 5325924119602913408)
i=100,len=288,rep=BigUInt(292992, 6794130646539351265, 5325924119602913408)
i=101,len=7200,rep=BigUInt(29592229, 3677664573221068002, 2962757942317257344)
i=102,len=7200,rep=BigUInt(29592229, 3677664573221068002, 2962757942317257344)
i=103,len=187200,rep=BigUInt(3047999607, 9864569567578971902, 10016162879324680576)
i=104,len=187200,rep=BigUInt(3047999607, 9864569567578971902, 10016162879324680576)
i=105,len=187200,rep=BigUInt(3047999607, 9864569567578971902, 10016162879324680576)
i=106,len=187200,rep=BigUInt(3047999607, 9864569567578971902, 10016162879324680576)
i=107,len=5054400,rep=BigUInt(326135958006, 4044531529505551460, 1818271812586827904)
i=108,len=5054400,rep=BigUInt(326135958006, 4044531529505551460, 1818271812586827904)
i=109,len=141523200,rep=BigUInt(35548819422677, 16578823020785421982, 13724186834868725376)
break at i=109,TO=109
SHOULD check `TO` and `i` carefully!
found number= BigUInt(21921671246381, 11662777460910458884, 7012004375286606722) for n<181!
loop0 finished
loop1 finished
found number= BigUInt(76640775490436, 17224944753369267051, 5535650887625968770) for n<191!
loop2 finished
loop3 finished
loop4 finished
loop5 finished
loop6 finished
loop7 finished
loop8 finished
found number= BigUInt(336184657781948, 13060152521397031879, 17401726287141301250) for n<193!
loop9 finished

real    0m37.568s
user    0m36.894s
sys     0m0.674s

点评

因为算东西没有重启系统,其实只要重启就好了。  发表于 2020-8-9 09:48
rime pinyin也安装不了吗, ^_^  发表于 2020-8-9 08:51
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2020-8-9 01:32:13 | 显示全部楼层
using Rayon to the 194 gap(n%97 thus = 2)
header
  1. /*
  2. LENGTH=500
  3. a=[True]*(LENGTH+1)
  4. a[0]=a[1]=False
  5. for i in range(2,LENGTH+1):
  6.   if a[i]:
  7.     for j in range(2,(LENGTH//i)+1):
  8.       a[i*j]=False

  9. print(("const ISPRIME:[bool;%d]= "%(LENGTH+1))+str(a).lower().replace(" ","")+";")
  10. [n for n,b in enumerate(a) if b]
  11. aa=[a for a in a]
  12. for i in [n for n,b in enumerate(a) if b]:
  13.   j=i*i;
  14.   while j<=LENGTH:
  15.     aa[j]=True
  16.     j*=i

  17. for i in range(1,200):
  18.     aa[i]=True

  19. #for u32
  20. print("\n".join(["N=>(self.5%N+N1*(self.4%N)+N2*(self.3%N)+N3*(self.2%N)+N4*(self.1%N)+N5*(self.0%N))%N,".replace("N5",str(2**(32*5)%n)).replace("N4",str(2**(32*4)%n)).replace("N3",str(2**(32*3)%n)).replace("N2",str(2**(32*2)%n)).replace("N1",str(2**32%n)).replace("N",str(n)) for n,b in enumerate(aa) if b]))
  21. #for u64 array
  22. print("\n".join(["            N=>(N2*((self.0)[0]%N)+N1*((self.0)[1]%N)+(self.0)[2]%N)%N,".replace("N2",str(2**(64*2)%n)).replace("N1",str(2**64%n)).replace("N",str(n)) for n,b in enumerate(aa) if b]))
  23. #for u64
  24. print("\n".join(["            N=>(N2*(self.0%N)+N1*(self.1%N)+self.2%N)%N,".replace("N2",str(2**(64*2)%n)).replace("N1",str(2**64%n)).replace("N",str(n)) for n,b in enumerate(aa) if b]))
  25. print("\n".join(["            N=>(N3*(self.0%N)+N2*(self.1%N)+N1*(self.2%N)+self.3%N)%N,".replace("N3",str(2**(64*3)%n)).replace("N2",str(2**(64*2)%n)).replace("N1",str(2**64%n)).replace("N",str(n)) for n,b in enumerate(aa) if b]))

  26. */
  27. const ISPRIME:[bool;501]= [false,false,true,true,false,true,false,true,false,false,false,true,false,true,false,false,false,true,false,true,false,false,false,true,false,false,false,false,false,true,false,true,false,false,false,false,false,true,false,false,false,true,false,true,false,false,false,true,false,false,false,false,false,true,false,false,false,false,false,true,false,true,false,false,false,false,false,true,false,false,false,true,false,true,false,false,false,false,false,true,false,false,false,true,false,false,false,false,false,true,false,false,false,false,false,false,false,true,false,false,false,true,false,true,false,false,false,true,false,true,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,true,false,false,false,false,false,true,false,true,false,false,false,false,false,false,false,false,false,true,false,true,false,false,false,false,false,true,false,false,false,false,false,true,false,false,false,true,false,false,false,false,false,true,false,false,false,false,false,true,false,true,false,false,false,false,false,false,false,false,false,true,false,true,false,false,false,true,false,true,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,true,false,true,false,false,false,true,false,false,false,false,false,true,false,true,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,true,false,false,false,false,false,true,false,false,false,false,false,true,false,true,false,false,false,false,false,true,false,false,false,true,false,true,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,true,false,true,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,true,false,true,false,false,false,true,false,false,false,false,false,true,false,false,false,false,false,false,false,true,false,false,false,false,false,true,false,false,false,false,false,true,false,false,false,true,false,false,false,false,false,true,false,false,false,false,false,false,false,true,false,false,false,true,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,true,false,true,false,false,false,false,false,false,false,false,false,true,false,true,false,false,false,false,false,true,false,false,false,true,false,false,false,false,false,true,false,false,false,false,false,false,false,true,false,false,false,true,false,true,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,true,false,false,false,true,false,false,false,false,false,false,false,true,false];
  28. #[derive(Clone,Copy,Debug,Ord,Eq,PartialEq,PartialOrd)]
  29. struct BigUInt(u64,u64,u64);
  30. impl BigUInt{
  31.     #[inline]
  32.     pub fn add(self,other:Self)->Self{
  33.         //self+other
  34.         let l0=self.2 as u128  + other.2 as u128;
  35.         let (l0,g)=(l0 as u64,l0>>64);
  36.         let l1=self.1 as u128+g+other.1 as u128;
  37.         let (l1,g)=(l1 as u64,l1>>64);
  38.         BigUInt(self.0+g as u64+other.0 as u64,l1,l0)
  39.     }
  40.     #[inline]
  41.     pub fn expand(self,other:Self,b:u128)->Self{
  42.         //self+other*b
  43.         let l0=self.2 as u128  +(other.2 as u128)*b;
  44.         let (l0,g)=(l0 as u64,l0>>64);
  45.         let l1=self.1 as u128+g+(other.1 as u128)*b;
  46.         let (l1,g)=(l1 as u64,l1>>64);
  47.         BigUInt(self.0+g as u64+other.0*b as u64,l1,l0)
  48.     }
  49.     #[inline]
  50.     pub fn mul(self,b:u128)->Self{
  51.         //self*b
  52.         let l0=  (self.2 as u128)*b;
  53.         let (l0,g)=(l0 as u64,l0>>64);
  54.         let l1=g+(self.1 as u128)*b;
  55.         let (l1,g)=(l1 as u64,l1>>64);
  56.         BigUInt(g as u64+self.0*b as u64,l1,l0)
  57.     }
  58.     #[inline]
  59.     pub fn rem(self,b:u32)->usize{
  60.         (match b{
  61.             1=>0,
  62.             2=>(0*(self.0%2)+0*(self.1%2)+self.2%2)%2,
  63.             3=>(1*(self.0%3)+1*(self.1%3)+self.2%3)%3,
  64.             4=>(0*(self.0%4)+0*(self.1%4)+self.2%4)%4,
  65.             5=>(1*(self.0%5)+1*(self.1%5)+self.2%5)%5,
  66.             6=>(4*(self.0%6)+4*(self.1%6)+self.2%6)%6,
  67.             7=>(4*(self.0%7)+2*(self.1%7)+self.2%7)%7,
  68.             8=>(0*(self.0%8)+0*(self.1%8)+self.2%8)%8,
  69.             9=>(4*(self.0%9)+7*(self.1%9)+self.2%9)%9,
  70.             10=>(6*(self.0%10)+6*(self.1%10)+self.2%10)%10,
  71.             11=>(3*(self.0%11)+5*(self.1%11)+self.2%11)%11,
  72.             12=>(4*(self.0%12)+4*(self.1%12)+self.2%12)%12,
  73.             13=>(9*(self.0%13)+3*(self.1%13)+self.2%13)%13,
  74.             14=>(4*(self.0%14)+2*(self.1%14)+self.2%14)%14,
  75.             15=>(1*(self.0%15)+1*(self.1%15)+self.2%15)%15,
  76.             16=>(0*(self.0%16)+0*(self.1%16)+self.2%16)%16,
  77.             17=>(1*(self.0%17)+1*(self.1%17)+self.2%17)%17,
  78.             18=>(4*(self.0%18)+16*(self.1%18)+self.2%18)%18,
  79.             19=>(4*(self.0%19)+17*(self.1%19)+self.2%19)%19,
  80.             20=>(16*(self.0%20)+16*(self.1%20)+self.2%20)%20,
  81.             21=>(4*(self.0%21)+16*(self.1%21)+self.2%21)%21,
  82.             22=>(14*(self.0%22)+16*(self.1%22)+self.2%22)%22,
  83.             23=>(13*(self.0%23)+6*(self.1%23)+self.2%23)%23,
  84.             24=>(16*(self.0%24)+16*(self.1%24)+self.2%24)%24,
  85.             25=>(6*(self.0%25)+16*(self.1%25)+self.2%25)%25,
  86.             26=>(22*(self.0%26)+16*(self.1%26)+self.2%26)%26,
  87.             27=>(4*(self.0%27)+25*(self.1%27)+self.2%27)%27,
  88.             28=>(4*(self.0%28)+16*(self.1%28)+self.2%28)%28,
  89.             29=>(25*(self.0%29)+24*(self.1%29)+self.2%29)%29,
  90.             30=>(16*(self.0%30)+16*(self.1%30)+self.2%30)%30,
  91.             31=>(8*(self.0%31)+16*(self.1%31)+self.2%31)%31,
  92.             32=>(0*(self.0%32)+0*(self.1%32)+self.2%32)%32,
  93.             33=>(25*(self.0%33)+16*(self.1%33)+self.2%33)%33,
  94.             34=>(18*(self.0%34)+18*(self.1%34)+self.2%34)%34,
  95.             35=>(11*(self.0%35)+16*(self.1%35)+self.2%35)%35,
  96.             36=>(4*(self.0%36)+16*(self.1%36)+self.2%36)%36,
  97.             37=>(33*(self.0%37)+12*(self.1%37)+self.2%37)%37,
  98.             38=>(4*(self.0%38)+36*(self.1%38)+self.2%38)%38,
  99.             39=>(22*(self.0%39)+16*(self.1%39)+self.2%39)%39,
  100.             40=>(16*(self.0%40)+16*(self.1%40)+self.2%40)%40,
  101.             41=>(10*(self.0%41)+16*(self.1%41)+self.2%41)%41,
  102.             42=>(4*(self.0%42)+16*(self.1%42)+self.2%42)%42,
  103.             43=>(4*(self.0%43)+41*(self.1%43)+self.2%43)%43,
  104.             44=>(36*(self.0%44)+16*(self.1%44)+self.2%44)%44,
  105.             45=>(31*(self.0%45)+16*(self.1%45)+self.2%45)%45,
  106.             46=>(36*(self.0%46)+6*(self.1%46)+self.2%46)%46,
  107.             47=>(14*(self.0%47)+25*(self.1%47)+self.2%47)%47,
  108.             48=>(16*(self.0%48)+16*(self.1%48)+self.2%48)%48,
  109.             49=>(4*(self.0%49)+2*(self.1%49)+self.2%49)%49,
  110.             50=>(6*(self.0%50)+16*(self.1%50)+self.2%50)%50,
  111.             51=>(1*(self.0%51)+1*(self.1%51)+self.2%51)%51,
  112.             52=>(48*(self.0%52)+16*(self.1%52)+self.2%52)%52,
  113.             53=>(13*(self.0%53)+15*(self.1%53)+self.2%53)%53,
  114.             54=>(4*(self.0%54)+52*(self.1%54)+self.2%54)%54,
  115.             55=>(36*(self.0%55)+16*(self.1%55)+self.2%55)%55,
  116.             56=>(32*(self.0%56)+16*(self.1%56)+self.2%56)%56,
  117.             57=>(4*(self.0%57)+55*(self.1%57)+self.2%57)%57,
  118.             58=>(54*(self.0%58)+24*(self.1%58)+self.2%58)%58,
  119.             59=>(25*(self.0%59)+5*(self.1%59)+self.2%59)%59,
  120.             60=>(16*(self.0%60)+16*(self.1%60)+self.2%60)%60,
  121.             61=>(12*(self.0%61)+16*(self.1%61)+self.2%61)%61,
  122.             62=>(8*(self.0%62)+16*(self.1%62)+self.2%62)%62,
  123.             63=>(4*(self.0%63)+16*(self.1%63)+self.2%63)%63,
  124.             64=>(0*(self.0%64)+0*(self.1%64)+self.2%64)%64,
  125.             65=>(61*(self.0%65)+16*(self.1%65)+self.2%65)%65,
  126.             66=>(58*(self.0%66)+16*(self.1%66)+self.2%66)%66,
  127.             67=>(21*(self.0%67)+17*(self.1%67)+self.2%67)%67,
  128.             68=>(52*(self.0%68)+52*(self.1%68)+self.2%68)%68,
  129.             69=>(13*(self.0%69)+52*(self.1%69)+self.2%69)%69,
  130.             70=>(46*(self.0%70)+16*(self.1%70)+self.2%70)%70,
  131.             71=>(29*(self.0%71)+10*(self.1%71)+self.2%71)%71,
  132.             72=>(40*(self.0%72)+16*(self.1%72)+self.2%72)%72,
  133.             73=>(4*(self.0%73)+2*(self.1%73)+self.2%73)%73,
  134.             74=>(70*(self.0%74)+12*(self.1%74)+self.2%74)%74,
  135.             75=>(31*(self.0%75)+16*(self.1%75)+self.2%75)%75,
  136.             76=>(4*(self.0%76)+36*(self.1%76)+self.2%76)%76,
  137.             77=>(25*(self.0%77)+16*(self.1%77)+self.2%77)%77,
  138.             78=>(22*(self.0%78)+16*(self.1%78)+self.2%78)%78,
  139.             79=>(73*(self.0%79)+51*(self.1%79)+self.2%79)%79,
  140.             80=>(16*(self.0%80)+16*(self.1%80)+self.2%80)%80,
  141.             81=>(31*(self.0%81)+52*(self.1%81)+self.2%81)%81,
  142.             82=>(10*(self.0%82)+16*(self.1%82)+self.2%82)%82,
  143.             83=>(51*(self.0%83)+36*(self.1%83)+self.2%83)%83,
  144.             84=>(4*(self.0%84)+16*(self.1%84)+self.2%84)%84,
  145.             85=>(1*(self.0%85)+1*(self.1%85)+self.2%85)%85,
  146.             86=>(4*(self.0%86)+84*(self.1%86)+self.2%86)%86,
  147.             87=>(25*(self.0%87)+82*(self.1%87)+self.2%87)%87,
  148.             88=>(80*(self.0%88)+16*(self.1%88)+self.2%88)%88,
  149.             89=>(39*(self.0%89)+67*(self.1%89)+self.2%89)%89,
  150.             90=>(76*(self.0%90)+16*(self.1%90)+self.2%90)%90,
  151.             91=>(74*(self.0%91)+16*(self.1%91)+self.2%91)%91,
  152.             92=>(36*(self.0%92)+52*(self.1%92)+self.2%92)%92,
  153.             93=>(70*(self.0%93)+16*(self.1%93)+self.2%93)%93,
  154.             94=>(14*(self.0%94)+72*(self.1%94)+self.2%94)%94,
  155.             95=>(61*(self.0%95)+36*(self.1%95)+self.2%95)%95,
  156.             96=>(64*(self.0%96)+64*(self.1%96)+self.2%96)%96,
  157.             97=>(35*(self.0%97)+61*(self.1%97)+self.2%97)%97,
  158.             98=>(4*(self.0%98)+2*(self.1%98)+self.2%98)%98,
  159.             99=>(58*(self.0%99)+16*(self.1%99)+self.2%99)%99,
  160.             100=>(56*(self.0%100)+16*(self.1%100)+self.2%100)%100,
  161.             101=>(80*(self.0%101)+79*(self.1%101)+self.2%101)%101,
  162.             102=>(52*(self.0%102)+52*(self.1%102)+self.2%102)%102,
  163.             103=>(38*(self.0%103)+55*(self.1%103)+self.2%103)%103,
  164.             104=>(48*(self.0%104)+16*(self.1%104)+self.2%104)%104,
  165.             105=>(46*(self.0%105)+16*(self.1%105)+self.2%105)%105,
  166.             106=>(66*(self.0%106)+68*(self.1%106)+self.2%106)%106,
  167.             107=>(11*(self.0%107)+92*(self.1%107)+self.2%107)%107,
  168.             108=>(4*(self.0%108)+52*(self.1%108)+self.2%108)%108,
  169.             109=>(105*(self.0%109)+66*(self.1%109)+self.2%109)%109,
  170.             110=>(36*(self.0%110)+16*(self.1%110)+self.2%110)%110,
  171.             111=>(70*(self.0%111)+49*(self.1%111)+self.2%111)%111,
  172.             112=>(32*(self.0%112)+16*(self.1%112)+self.2%112)%112,
  173.             113=>(109*(self.0%113)+30*(self.1%113)+self.2%113)%113,
  174.             114=>(4*(self.0%114)+112*(self.1%114)+self.2%114)%114,
  175.             115=>(36*(self.0%115)+6*(self.1%115)+self.2%115)%115,
  176.             116=>(112*(self.0%116)+24*(self.1%116)+self.2%116)%116,
  177.             117=>(22*(self.0%117)+16*(self.1%117)+self.2%117)%117,
  178.             118=>(84*(self.0%118)+64*(self.1%118)+self.2%118)%118,
  179.             119=>(18*(self.0%119)+86*(self.1%119)+self.2%119)%119,
  180.             120=>(16*(self.0%120)+16*(self.1%120)+self.2%120)%120,
  181.             121=>(58*(self.0%121)+93*(self.1%121)+self.2%121)%121,
  182.             122=>(12*(self.0%122)+16*(self.1%122)+self.2%122)%122,
  183.             123=>(10*(self.0%123)+16*(self.1%123)+self.2%123)%123,
  184.             124=>(8*(self.0%124)+16*(self.1%124)+self.2%124)%124,
  185.             125=>(81*(self.0%125)+116*(self.1%125)+self.2%125)%125,
  186.             126=>(4*(self.0%126)+16*(self.1%126)+self.2%126)%126,
  187.             127=>(4*(self.0%127)+2*(self.1%127)+self.2%127)%127,
  188.             128=>(0*(self.0%128)+0*(self.1%128)+self.2%128)%128,
  189.             129=>(4*(self.0%129)+127*(self.1%129)+self.2%129)%129,
  190.             130=>(126*(self.0%130)+16*(self.1%130)+self.2%130)%130,
  191.             131=>(33*(self.0%131)+65*(self.1%131)+self.2%131)%131,
  192.             132=>(124*(self.0%132)+16*(self.1%132)+self.2%132)%132,
  193.             133=>(4*(self.0%133)+93*(self.1%133)+self.2%133)%133,
  194.             134=>(88*(self.0%134)+84*(self.1%134)+self.2%134)%134,
  195.             135=>(31*(self.0%135)+106*(self.1%135)+self.2%135)%135,
  196.             136=>(120*(self.0%136)+120*(self.1%136)+self.2%136)%136,
  197.             137=>(38*(self.0%137)+60*(self.1%137)+self.2%137)%137,
  198.             138=>(82*(self.0%138)+52*(self.1%138)+self.2%138)%138,
  199.             139=>(30*(self.0%139)+13*(self.1%139)+self.2%139)%139,
  200.             140=>(116*(self.0%140)+16*(self.1%140)+self.2%140)%140,
  201.             141=>(61*(self.0%141)+25*(self.1%141)+self.2%141)%141,
  202.             142=>(100*(self.0%142)+10*(self.1%142)+self.2%142)%142,
  203.             143=>(113*(self.0%143)+16*(self.1%143)+self.2%143)%143,
  204.             144=>(112*(self.0%144)+16*(self.1%144)+self.2%144)%144,
  205.             145=>(141*(self.0%145)+111*(self.1%145)+self.2%145)%145,
  206.             146=>(4*(self.0%146)+2*(self.1%146)+self.2%146)%146,
  207.             147=>(4*(self.0%147)+100*(self.1%147)+self.2%147)%147,
  208.             148=>(144*(self.0%148)+12*(self.1%148)+self.2%148)%148,
  209.             149=>(123*(self.0%149)+102*(self.1%149)+self.2%149)%149,
  210.             150=>(106*(self.0%150)+16*(self.1%150)+self.2%150)%150,
  211.             151=>(105*(self.0%151)+16*(self.1%151)+self.2%151)%151,
  212.             152=>(80*(self.0%152)+112*(self.1%152)+self.2%152)%152,
  213.             153=>(103*(self.0%153)+52*(self.1%153)+self.2%153)%153,
  214.             154=>(102*(self.0%154)+16*(self.1%154)+self.2%154)%154,
  215.             155=>(101*(self.0%155)+16*(self.1%155)+self.2%155)%155,
  216.             156=>(100*(self.0%156)+16*(self.1%156)+self.2%156)%156,
  217.             157=>(39*(self.0%157)+14*(self.1%157)+self.2%157)%157,
  218.             158=>(152*(self.0%158)+130*(self.1%158)+self.2%158)%158,
  219.             159=>(13*(self.0%159)+121*(self.1%159)+self.2%159)%159,
  220.             160=>(96*(self.0%160)+96*(self.1%160)+self.2%160)%160,
  221.             161=>(151*(self.0%161)+121*(self.1%161)+self.2%161)%161,
  222.             162=>(112*(self.0%162)+52*(self.1%162)+self.2%162)%162,
  223.             163=>(152*(self.0%163)+57*(self.1%163)+self.2%163)%163,
  224.             164=>(92*(self.0%164)+16*(self.1%164)+self.2%164)%164,
  225.             165=>(91*(self.0%165)+16*(self.1%165)+self.2%165)%165,
  226.             166=>(134*(self.0%166)+36*(self.1%166)+self.2%166)%166,
  227.             167=>(63*(self.0%167)+49*(self.1%167)+self.2%167)%167,
  228.             168=>(88*(self.0%168)+16*(self.1%168)+self.2%168)%168,
  229.             169=>(48*(self.0%169)+94*(self.1%169)+self.2%169)%169,
  230.             170=>(86*(self.0%170)+86*(self.1%170)+self.2%170)%170,
  231.             171=>(4*(self.0%171)+169*(self.1%171)+self.2%171)%171,
  232.             172=>(4*(self.0%172)+84*(self.1%172)+self.2%172)%172,
  233.             173=>(133*(self.0%173)+47*(self.1%173)+self.2%173)%173,
  234.             174=>(112*(self.0%174)+82*(self.1%174)+self.2%174)%174,
  235.             175=>(81*(self.0%175)+16*(self.1%175)+self.2%175)%175,
  236.             176=>(80*(self.0%176)+16*(self.1%176)+self.2%176)%176,
  237.             177=>(25*(self.0%177)+64*(self.1%177)+self.2%177)%177,
  238.             178=>(128*(self.0%178)+156*(self.1%178)+self.2%178)%178,
  239.             179=>(161*(self.0%179)+124*(self.1%179)+self.2%179)%179,
  240.             180=>(76*(self.0%180)+16*(self.1%180)+self.2%180)%180,
  241.             181=>(126*(self.0%181)+44*(self.1%181)+self.2%181)%181,
  242.             182=>(74*(self.0%182)+16*(self.1%182)+self.2%182)%182,
  243.             183=>(73*(self.0%183)+16*(self.1%183)+self.2%183)%183,
  244.             184=>(128*(self.0%184)+144*(self.1%184)+self.2%184)%184,
  245.             185=>(181*(self.0%185)+86*(self.1%185)+self.2%185)%185,
  246.             186=>(70*(self.0%186)+16*(self.1%186)+self.2%186)%186,
  247.             187=>(69*(self.0%187)+137*(self.1%187)+self.2%187)%187,
  248.             188=>(108*(self.0%188)+72*(self.1%188)+self.2%188)%188,
  249.             189=>(4*(self.0%189)+79*(self.1%189)+self.2%189)%189,
  250.             190=>(156*(self.0%190)+36*(self.1%190)+self.2%190)%190,
  251.             191=>(103*(self.0%191)+26*(self.1%191)+self.2%191)%191,
  252.             192=>(64*(self.0%192)+64*(self.1%192)+self.2%192)%192,
  253.             193=>(108*(self.0%193)+84*(self.1%193)+self.2%193)%193,
  254.             194=>(132*(self.0%194)+158*(self.1%194)+self.2%194)%194,
  255.             195=>(61*(self.0%195)+16*(self.1%195)+self.2%195)%195,
  256.             196=>(4*(self.0%196)+100*(self.1%196)+self.2%196)%196,
  257.             197=>(175*(self.0%197)+61*(self.1%197)+self.2%197)%197,
  258.             198=>(58*(self.0%198)+16*(self.1%198)+self.2%198)%198,
  259.             199=>(155*(self.0%199)+126*(self.1%199)+self.2%199)%199,
  260.             211=>(119*(self.0%211)+69*(self.1%211)+self.2%211)%211,
  261.             223=>(171*(self.0%223)+49*(self.1%223)+self.2%223)%223,
  262.             227=>(147*(self.0%227)+104*(self.1%227)+self.2%227)%227,
  263.             229=>(104*(self.0%229)+44*(self.1%229)+self.2%229)%229,
  264.             233=>(135*(self.0%233)+64*(self.1%233)+self.2%233)%233,
  265.             239=>(34*(self.0%239)+150*(self.1%239)+self.2%239)%239,
  266.             241=>(15*(self.0%241)+225*(self.1%241)+self.2%241)%241,
  267.             243=>(193*(self.0%243)+133*(self.1%243)+self.2%243)%243,
  268.             251=>(243*(self.0%251)+69*(self.1%251)+self.2%251)%251,
  269.             256=>(0*(self.0%256)+0*(self.1%256)+self.2%256)%256,
  270.             257=>(1*(self.0%257)+1*(self.1%257)+self.2%257)%257,
  271.             263=>(33*(self.0%263)+104*(self.1%263)+self.2%263)%263,
  272.             269=>(21*(self.0%269)+57*(self.1%269)+self.2%269)%269,
  273.             271=>(36*(self.0%271)+265*(self.1%271)+self.2%271)%271,
  274.             277=>(155*(self.0%277)+175*(self.1%277)+self.2%277)%277,
  275.             281=>(85*(self.0%281)+101*(self.1%281)+self.2%281)%281,
  276.             283=>(151*(self.0%283)+240*(self.1%283)+self.2%283)%283,
  277.             289=>(35*(self.0%289)+18*(self.1%289)+self.2%289)%289,
  278.             293=>(161*(self.0%293)+109*(self.1%293)+self.2%293)%293,
  279.             307=>(199*(self.0%307)+97*(self.1%307)+self.2%307)%307,
  280.             311=>(35*(self.0%311)+208*(self.1%311)+self.2%311)%311,
  281.             313=>(132*(self.0%313)+142*(self.1%313)+self.2%313)%313,
  282.             317=>(235*(self.0%317)+251*(self.1%317)+self.2%317)%317,
  283.             331=>(256*(self.0%331)+16*(self.1%331)+self.2%331)%331,
  284.             337=>(4*(self.0%337)+2*(self.1%337)+self.2%337)%337,
  285.             343=>(151*(self.0%343)+296*(self.1%343)+self.2%343)%343,
  286.             347=>(129*(self.0%347)+167*(self.1%347)+self.2%347)%347,
  287.             349=>(148*(self.0%349)+219*(self.1%349)+self.2%349)%349,
  288.             353=>(22*(self.0%353)+187*(self.1%353)+self.2%353)%353,
  289.             359=>(264*(self.0%359)+303*(self.1%359)+self.2%359)%359,
  290.             361=>(156*(self.0%361)+321*(self.1%361)+self.2%361)%361,
  291.             367=>(129*(self.0%367)+297*(self.1%367)+self.2%367)%367,
  292.             373=>(68*(self.0%373)+21*(self.1%373)+self.2%373)%373,
  293.             379=>(171*(self.0%379)+277*(self.1%379)+self.2%379)%379,
  294.             383=>(150*(self.0%383)+143*(self.1%383)+self.2%383)%383,
  295.             389=>(164*(self.0%389)+169*(self.1%389)+self.2%389)%389,
  296.             397=>(273*(self.0%397)+99*(self.1%397)+self.2%397)%397,
  297.             401=>(360*(self.0%401)+63*(self.1%401)+self.2%401)%401,
  298.             409=>(265*(self.0%409)+80*(self.1%409)+self.2%409)%409,
  299.             419=>(100*(self.0%419)+409*(self.1%419)+self.2%419)%419,
  300.             421=>(255*(self.0%421)+26*(self.1%421)+self.2%421)%421,
  301.             431=>(216*(self.0%431)+337*(self.1%431)+self.2%431)%431,
  302.             433=>(150*(self.0%433)+296*(self.1%433)+self.2%433)%433,
  303.             439=>(36*(self.0%439)+433*(self.1%439)+self.2%439)%439,
  304.             443=>(153*(self.0%443)+215*(self.1%443)+self.2%443)%443,
  305.             449=>(18*(self.0%449)+359*(self.1%449)+self.2%449)%449,
  306.             457=>(68*(self.0%457)+215*(self.1%457)+self.2%457)%457,
  307.             461=>(444*(self.0%461)+370*(self.1%461)+self.2%461)%461,
  308.             463=>(60*(self.0%463)+261*(self.1%463)+self.2%463)%463,
  309.             467=>(264*(self.0%467)+369*(self.1%467)+self.2%467)%467,
  310.             479=>(28*(self.0%479)+403*(self.1%479)+self.2%479)%479,
  311.             487=>(467*(self.0%487)+286*(self.1%487)+self.2%487)%487,
  312.             491=>(429*(self.0%491)+263*(self.1%491)+self.2%491)%491,
  313.             499=>(462*(self.0%499)+31*(self.1%499)+self.2%499)%499,
  314.             _=>2
  315.         }) as usize
  316.     }
  317. }

复制代码



main
  1. #![feature(const_int_pow)]
  2. include!("main.header");
  3. extern crate rayon;
  4. use rayon::prelude::*;
  5. const UPPER:u32=193;
  6. const HALF:u32=(UPPER>>1)+1;
  7. const TO:u32=109;
  8. fn main(){
  9.     let mut lcm=BigUInt(0,0,2);
  10.     for i in 3..HALF{
  11.         lcm=lcm.mul((i/gcd(i,lcm)) as u128)
  12.     }
  13.     let mut x=(vec![BigUInt(0,0,2)],lcm);
  14.     //x=search_roll(x.0,81,x.1);//3
  15.     //x=search_roll(x.0,49,x.1);//7
  16.     x=search_roll(x.0,121,x.1);//11
  17.     x=search_roll(x.0,125,x.1);//2
  18.     x=search_roll(x.0,128,x.1);//5
  19.     x=search_roll(x.0,169,x.1);//13
  20.     //x=search_roll(x.0,243,x.1);//3
  21.     //x=search_roll(x.0,289,x.1);//17
  22.     //x=search_roll(x.0,343,x.1);//7
  23.     for i in HALF..=TO{
  24.         x=search_roll(x.0,i,x.1);
  25.         println!("i={},len={},rep={:?}",i,(x.0).len(),x.1);
  26.         if (x.0).len()>10000000{println!("break at i={},TO={}",i,TO);break}
  27.     }
  28.     let (mut b,lcm)=x;
  29.     b.sort_unstable();
  30.     println!("SHOULD check `TO` and `i` carefully!");
  31.     (0..100).into_par_iter().for_each(|i|{
  32.         search_rayon(&b,193,lcm.mul(i as u128));
  33.     });
  34. }
  35. type BIG=BigUInt;
  36. #[inline]
  37. fn gcd(i:u32,j:BIG)->u32{//ensure i<j for better performance
  38.     let (mut i,mut j)=(j.rem(i as u32) as u32,i);
  39.     while i != 0{
  40.         let t=j%i;
  41.         j=i;
  42.         i=t;
  43.     }
  44.     j
  45. }
  46. fn search_roll(b:Vec<BIG>,ix:u32,mut repeats:BIG)->(Vec<BIG>,BIG){
  47.     let i=ix/gcd(ix,repeats);
  48.     let b=if i>1{b.into_iter().map(|x|(0..i).map(|c|x.expand(repeats,c as u128)).filter(|x|ISPRIME[x.rem(ix)]).collect::<Vec<_>>()).flatten().collect::<Vec<_>>()}else{b};
  49.     if i>1 {repeats=repeats.mul(i as u128)}
  50.     (b,repeats)
  51. }
  52. fn search_rayon(b:&[BIG],mut upper:u32,mp:BIG)->u32{
  53.     let mut c=b.into_iter();
  54.     c.next();
  55.     let mut gg=vec![113,127,131,137,139,149,151,157,163,167];
  56.     let mut rem=vec![173,178,179,181,191,193,194,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293];
  57.     let mut h=rem.drain(..);
  58.     while let Some(hh)=h.next(){
  59.         gg.push(hh);
  60.         if hh>=upper{break}
  61.     }
  62.     for i in c{
  63.         while gg.iter().copied().all(|t|ISPRIME[i.add(mp).rem(t)]){
  64.             upper=h.next().unwrap();
  65.             println!("found number= {:?} for n<{}!",i.add(mp),upper);
  66.             gg.push(upper);
  67.         }
  68.     }
  69.     upper
  70. }

复制代码

finally found 655569072883475643276379698332630870445125049195696002
using gp:
ff=(d)->for(i=3,900,if(!isprime(d%i),print(i);break))
ff(655569072883475643276379698332630870445125049195696002)
194

to calculate a BigUInt:
BigUInt=(a,b,c)->d=a*2^128+b*2^64+c;for(i=3,900,if(!isprime(d%i),print(i);break));d
verify and calculate the BigUInt

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2020-8-9 07:27:55 | 显示全部楼层
今天把63以前结果补充一下:
? getlast(1395515070407)
56
? getlast(2345173940567)
58
? getlast(3018245755367)
60
? getlast(7985415341207)
62

点评

赞。望尘莫及  发表于 2020-8-9 09:40
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-4-26 21:47 , Processed in 0.063700 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表