mathe 发表于 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

mathe 发表于 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 00:52:56

本帖最后由 .·.·. 于 2020-8-9 09:48 编辑

mathe 发表于 2020-8-8 17:20
153~156
28466105341303483745606123156025578668368002
157
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
%21 = (a,b,c)->d=a*2^128+b*2^64+c;for(i=3,900,if(!isprime(d%i),print(i);break));d
00:47:01> g(1040147161867, 7560342529706118980, 11446842006473251970)
179
%22 = 353943738186338730051340043852386052151622936272002
00:47:03> g(343275800605, 11767202774273793771, 15199516501634173186)
178
%23 = 116810701936766586361368933161051719437728630688002
(BigUInt=g)
01:40:11> BigUInt(336184657781948, 13060152521397031879, 17401726287141301250)
193
%57 = 114397711072547200623926739913773332504663121492864002
01:40:22> BigUInt(76640775490436, 17224944753369267051, 5535650887625968770)
191
%58 = 26079504486542128214527139484976208504732884352208002
01:40:27> BigUInt(21921671246381, 11662777460910458884, 7012004375286606722)
181
%59 = 7459558178581420991908368303782280420035186413104002
(194:)655569072883475643276379698332630870445125049195696002(code is incorrect thus do not generate the BigUInt form.)
01:40:35> BigUInt(21550470068748838, 14667185391198351420, 18069870029154129154)
197
%60 = 7333244963252694316979523001920058246398799258689312002
01:43:43> BigUInt(49238389357311262, 5374406407451916197, 11540656834366258178)
199
%61 = 16754955673880622369079802324257242816195831706070400002
01:48:23> BigUInt(3649368858081476934, 14762377635946019554, 17114688005815144834)
206
%68 = 1241815872795527340920909004524886711949273374627222000002
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
%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
02:24:15> BigU256(11, 9338117007605686109, 5914508867865278435, 9449427700573572482)
211
%103 = 72225715647186222395152227158525640349057726424522471280002
02:24:25> BigU256(13, 11922583201728322026, 11442997097915309871, 16504593912194840962)
214
%104 = 85659367391722784092607464197468049651961443566063782640002
02:24:34> BigU256(5045, 14915641366288941122, 12556338656733202238, 1357278714895837442)
218
%105 = 31673053784774069114917859005213870009008990233082429871008002
02:32:50> BigU256(105642, 4594879267310787348, 12542645452379590053, 6593728445292498434)
223
%107 = 663127145086112525715369034835863236326107289562909156940992002
02:33:13> BigU256(324382, 16707202402379446201, 2441149314094187990, 17344994933329711234)
226
%108 = 2036184500294580388401873354629853515994924364902165172748112002
02:35:06> BigU256(29594670, 3914874787019208054, 5083363177805329805, 9126329000077058178)
233
%111 = 185768755747358998327069097333443876936859437235420585132525904002
02:38:55> BigU256(769192496, 13818213026569080142, 10363200697496292489, 12843986744144596610)
242
%115 = 4828299556190106737188708726420164405880642740182586600077808144002
09:38:56> BigU256(229247836159, 2678296511289632618, 6941544924194096003, 919448886373386882)
251
%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
#!
/*
LENGTH=500
a=*(LENGTH+1)
a=a=False
for i in range(2,LENGTH+1):
if a:
    for j in range(2,(LENGTH//i)+1):
      a=False

print(("const ISPRIME:= "%(LENGTH+1))+str(a).lower().replace(" ","")+";")

aa=
for i in :
j=i*i;
while j<=LENGTH:
    aa=True
    j*=i

for i in range(1,200):
    aa=True

#for u32
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]))
#for u64 array
print("\n".join(["            N=>(N2*((self.0)%N)+N1*((self.0)%N)+(self.0)%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]))
#for u64
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]))
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]))

*/
const ISPRIME:= ;
const UPPER:u32=173;
const HALF:u32=(UPPER>>1)+1;
const TO:u32=108;
fn main(){
    let mut lcm=BigUInt(0,0,2);
    for i in 3..HALF{
      lcm=lcm.mul((i/gcd(i,lcm)) as u128)
    }
    let mut x=(vec!,lcm);
    //x=search_roll(x.0,81,x.1);//3
    //x=search_roll(x.0,49,x.1);//7
    x=search_roll(x.0,121,x.1);//11
    x=search_roll(x.0,125,x.1);//2
    x=search_roll(x.0,128,x.1);//5
    x=search_roll(x.0,169,x.1);//13
    //x=search_roll(x.0,243,x.1);//3
    //x=search_roll(x.0,289,x.1);//17
    //x=search_roll(x.0,343,x.1);//7
    for i in HALF..=TO{
      x=search_roll(x.0,i,x.1);
      println!("i={},len={},rep={:?}",i,(x.0).len(),x.1);
      if (x.0).len()>10000000{println!("break at i={},TO={}",i,TO);break}
    }
    println!("SHOULD check `TO` and `i` carefully!");
    let (mut b,lcm)=x;
    b.sort_unstable();
    let mut upper=search_once(&b,167);
    for i in 0..3{
      println!("loop{} finished",i);
      b.iter_mut().for_each(|x|*x=x.add(lcm));
      upper=search_once(&b,upper);
    }
}
#
struct BigUInt(u64,u64,u64);
impl BigUInt{
    #
    pub fn add(self,other:Self)->Self{
      //self+other
      let l0=self.2 as u128+ other.2 as u128;
      let (l0,g)=(l0 as u64,l0>>64);
      let l1=self.1 as u128+g+other.1 as u128;
      let (l1,g)=(l1 as u64,l1>>64);
      BigUInt(self.0+g as u64+other.0 as u64,l1,l0)
    }
    #
    pub fn expand(self,other:Self,b:u128)->Self{
      //self+other*b
      let l0=self.2 as u128+(other.2 as u128)*b;
      let (l0,g)=(l0 as u64,l0>>64);
      let l1=self.1 as u128+g+(other.1 as u128)*b;
      let (l1,g)=(l1 as u64,l1>>64);
      BigUInt(self.0+g as u64+other.0*b as u64,l1,l0)
    }
    #
    pub fn mul(self,b:u128)->Self{
      //self*b
      let l0=(self.2 as u128)*b;
      let (l0,g)=(l0 as u64,l0>>64);
      let l1=g+(self.1 as u128)*b;
      let (l1,g)=(l1 as u64,l1>>64);
      BigUInt(g as u64+self.0*b as u64,l1,l0)
    }
    #
    pub fn rem(self,b:u32)->usize{//match(x){...N=>t%N,...}is much faster than t%x if N is a constant.
      (match b{
            1=>0,
            2=>(0*(self.0%2)+0*(self.1%2)+self.2%2)%2,
            3=>(1*(self.0%3)+1*(self.1%3)+self.2%3)%3,
            4=>(0*(self.0%4)+0*(self.1%4)+self.2%4)%4,
            5=>(1*(self.0%5)+1*(self.1%5)+self.2%5)%5,
            6=>(4*(self.0%6)+4*(self.1%6)+self.2%6)%6,
            7=>(4*(self.0%7)+2*(self.1%7)+self.2%7)%7,
            8=>(0*(self.0%8)+0*(self.1%8)+self.2%8)%8,
            9=>(4*(self.0%9)+7*(self.1%9)+self.2%9)%9,
            10=>(6*(self.0%10)+6*(self.1%10)+self.2%10)%10,
            11=>(3*(self.0%11)+5*(self.1%11)+self.2%11)%11,
            12=>(4*(self.0%12)+4*(self.1%12)+self.2%12)%12,
            13=>(9*(self.0%13)+3*(self.1%13)+self.2%13)%13,
            14=>(4*(self.0%14)+2*(self.1%14)+self.2%14)%14,
            15=>(1*(self.0%15)+1*(self.1%15)+self.2%15)%15,
            16=>(0*(self.0%16)+0*(self.1%16)+self.2%16)%16,
            17=>(1*(self.0%17)+1*(self.1%17)+self.2%17)%17,
            18=>(4*(self.0%18)+16*(self.1%18)+self.2%18)%18,
            19=>(4*(self.0%19)+17*(self.1%19)+self.2%19)%19,
            20=>(16*(self.0%20)+16*(self.1%20)+self.2%20)%20,
            21=>(4*(self.0%21)+16*(self.1%21)+self.2%21)%21,
            22=>(14*(self.0%22)+16*(self.1%22)+self.2%22)%22,
            23=>(13*(self.0%23)+6*(self.1%23)+self.2%23)%23,
            24=>(16*(self.0%24)+16*(self.1%24)+self.2%24)%24,
            25=>(6*(self.0%25)+16*(self.1%25)+self.2%25)%25,
            26=>(22*(self.0%26)+16*(self.1%26)+self.2%26)%26,
            27=>(4*(self.0%27)+25*(self.1%27)+self.2%27)%27,
            28=>(4*(self.0%28)+16*(self.1%28)+self.2%28)%28,
            29=>(25*(self.0%29)+24*(self.1%29)+self.2%29)%29,
            30=>(16*(self.0%30)+16*(self.1%30)+self.2%30)%30,
            31=>(8*(self.0%31)+16*(self.1%31)+self.2%31)%31,
            32=>(0*(self.0%32)+0*(self.1%32)+self.2%32)%32,
            33=>(25*(self.0%33)+16*(self.1%33)+self.2%33)%33,
            34=>(18*(self.0%34)+18*(self.1%34)+self.2%34)%34,
            35=>(11*(self.0%35)+16*(self.1%35)+self.2%35)%35,
            36=>(4*(self.0%36)+16*(self.1%36)+self.2%36)%36,
            37=>(33*(self.0%37)+12*(self.1%37)+self.2%37)%37,
            38=>(4*(self.0%38)+36*(self.1%38)+self.2%38)%38,
            39=>(22*(self.0%39)+16*(self.1%39)+self.2%39)%39,
            40=>(16*(self.0%40)+16*(self.1%40)+self.2%40)%40,
            41=>(10*(self.0%41)+16*(self.1%41)+self.2%41)%41,
            42=>(4*(self.0%42)+16*(self.1%42)+self.2%42)%42,
            43=>(4*(self.0%43)+41*(self.1%43)+self.2%43)%43,
            44=>(36*(self.0%44)+16*(self.1%44)+self.2%44)%44,
            45=>(31*(self.0%45)+16*(self.1%45)+self.2%45)%45,
            46=>(36*(self.0%46)+6*(self.1%46)+self.2%46)%46,
            47=>(14*(self.0%47)+25*(self.1%47)+self.2%47)%47,
            48=>(16*(self.0%48)+16*(self.1%48)+self.2%48)%48,
            49=>(4*(self.0%49)+2*(self.1%49)+self.2%49)%49,
            50=>(6*(self.0%50)+16*(self.1%50)+self.2%50)%50,
            51=>(1*(self.0%51)+1*(self.1%51)+self.2%51)%51,
            52=>(48*(self.0%52)+16*(self.1%52)+self.2%52)%52,
            53=>(13*(self.0%53)+15*(self.1%53)+self.2%53)%53,
            54=>(4*(self.0%54)+52*(self.1%54)+self.2%54)%54,
            55=>(36*(self.0%55)+16*(self.1%55)+self.2%55)%55,
            56=>(32*(self.0%56)+16*(self.1%56)+self.2%56)%56,
            57=>(4*(self.0%57)+55*(self.1%57)+self.2%57)%57,
            58=>(54*(self.0%58)+24*(self.1%58)+self.2%58)%58,
            59=>(25*(self.0%59)+5*(self.1%59)+self.2%59)%59,
            60=>(16*(self.0%60)+16*(self.1%60)+self.2%60)%60,
            61=>(12*(self.0%61)+16*(self.1%61)+self.2%61)%61,
            62=>(8*(self.0%62)+16*(self.1%62)+self.2%62)%62,
            63=>(4*(self.0%63)+16*(self.1%63)+self.2%63)%63,
            64=>(0*(self.0%64)+0*(self.1%64)+self.2%64)%64,
            65=>(61*(self.0%65)+16*(self.1%65)+self.2%65)%65,
            66=>(58*(self.0%66)+16*(self.1%66)+self.2%66)%66,
            67=>(21*(self.0%67)+17*(self.1%67)+self.2%67)%67,
            68=>(52*(self.0%68)+52*(self.1%68)+self.2%68)%68,
            69=>(13*(self.0%69)+52*(self.1%69)+self.2%69)%69,
            70=>(46*(self.0%70)+16*(self.1%70)+self.2%70)%70,
            71=>(29*(self.0%71)+10*(self.1%71)+self.2%71)%71,
            72=>(40*(self.0%72)+16*(self.1%72)+self.2%72)%72,
            73=>(4*(self.0%73)+2*(self.1%73)+self.2%73)%73,
            74=>(70*(self.0%74)+12*(self.1%74)+self.2%74)%74,
            75=>(31*(self.0%75)+16*(self.1%75)+self.2%75)%75,
            76=>(4*(self.0%76)+36*(self.1%76)+self.2%76)%76,
            77=>(25*(self.0%77)+16*(self.1%77)+self.2%77)%77,
            78=>(22*(self.0%78)+16*(self.1%78)+self.2%78)%78,
            79=>(73*(self.0%79)+51*(self.1%79)+self.2%79)%79,
            80=>(16*(self.0%80)+16*(self.1%80)+self.2%80)%80,
            81=>(31*(self.0%81)+52*(self.1%81)+self.2%81)%81,
            82=>(10*(self.0%82)+16*(self.1%82)+self.2%82)%82,
            83=>(51*(self.0%83)+36*(self.1%83)+self.2%83)%83,
            84=>(4*(self.0%84)+16*(self.1%84)+self.2%84)%84,
            85=>(1*(self.0%85)+1*(self.1%85)+self.2%85)%85,
            86=>(4*(self.0%86)+84*(self.1%86)+self.2%86)%86,
            87=>(25*(self.0%87)+82*(self.1%87)+self.2%87)%87,
            88=>(80*(self.0%88)+16*(self.1%88)+self.2%88)%88,
            89=>(39*(self.0%89)+67*(self.1%89)+self.2%89)%89,
            90=>(76*(self.0%90)+16*(self.1%90)+self.2%90)%90,
            91=>(74*(self.0%91)+16*(self.1%91)+self.2%91)%91,
            92=>(36*(self.0%92)+52*(self.1%92)+self.2%92)%92,
            93=>(70*(self.0%93)+16*(self.1%93)+self.2%93)%93,
            94=>(14*(self.0%94)+72*(self.1%94)+self.2%94)%94,
            95=>(61*(self.0%95)+36*(self.1%95)+self.2%95)%95,
            96=>(64*(self.0%96)+64*(self.1%96)+self.2%96)%96,
            97=>(35*(self.0%97)+61*(self.1%97)+self.2%97)%97,
            98=>(4*(self.0%98)+2*(self.1%98)+self.2%98)%98,
            99=>(58*(self.0%99)+16*(self.1%99)+self.2%99)%99,
            100=>(56*(self.0%100)+16*(self.1%100)+self.2%100)%100,
            101=>(80*(self.0%101)+79*(self.1%101)+self.2%101)%101,
            102=>(52*(self.0%102)+52*(self.1%102)+self.2%102)%102,
            103=>(38*(self.0%103)+55*(self.1%103)+self.2%103)%103,
            104=>(48*(self.0%104)+16*(self.1%104)+self.2%104)%104,
            105=>(46*(self.0%105)+16*(self.1%105)+self.2%105)%105,
            106=>(66*(self.0%106)+68*(self.1%106)+self.2%106)%106,
            107=>(11*(self.0%107)+92*(self.1%107)+self.2%107)%107,
            108=>(4*(self.0%108)+52*(self.1%108)+self.2%108)%108,
            109=>(105*(self.0%109)+66*(self.1%109)+self.2%109)%109,
            110=>(36*(self.0%110)+16*(self.1%110)+self.2%110)%110,
            111=>(70*(self.0%111)+49*(self.1%111)+self.2%111)%111,
            112=>(32*(self.0%112)+16*(self.1%112)+self.2%112)%112,
            113=>(109*(self.0%113)+30*(self.1%113)+self.2%113)%113,
            114=>(4*(self.0%114)+112*(self.1%114)+self.2%114)%114,
            115=>(36*(self.0%115)+6*(self.1%115)+self.2%115)%115,
            116=>(112*(self.0%116)+24*(self.1%116)+self.2%116)%116,
            117=>(22*(self.0%117)+16*(self.1%117)+self.2%117)%117,
            118=>(84*(self.0%118)+64*(self.1%118)+self.2%118)%118,
            119=>(18*(self.0%119)+86*(self.1%119)+self.2%119)%119,
            120=>(16*(self.0%120)+16*(self.1%120)+self.2%120)%120,
            121=>(58*(self.0%121)+93*(self.1%121)+self.2%121)%121,
            122=>(12*(self.0%122)+16*(self.1%122)+self.2%122)%122,
            123=>(10*(self.0%123)+16*(self.1%123)+self.2%123)%123,
            124=>(8*(self.0%124)+16*(self.1%124)+self.2%124)%124,
            125=>(81*(self.0%125)+116*(self.1%125)+self.2%125)%125,
            126=>(4*(self.0%126)+16*(self.1%126)+self.2%126)%126,
            127=>(4*(self.0%127)+2*(self.1%127)+self.2%127)%127,
            128=>(0*(self.0%128)+0*(self.1%128)+self.2%128)%128,
            129=>(4*(self.0%129)+127*(self.1%129)+self.2%129)%129,
            130=>(126*(self.0%130)+16*(self.1%130)+self.2%130)%130,
            131=>(33*(self.0%131)+65*(self.1%131)+self.2%131)%131,
            132=>(124*(self.0%132)+16*(self.1%132)+self.2%132)%132,
            133=>(4*(self.0%133)+93*(self.1%133)+self.2%133)%133,
            134=>(88*(self.0%134)+84*(self.1%134)+self.2%134)%134,
            135=>(31*(self.0%135)+106*(self.1%135)+self.2%135)%135,
            136=>(120*(self.0%136)+120*(self.1%136)+self.2%136)%136,
            137=>(38*(self.0%137)+60*(self.1%137)+self.2%137)%137,
            138=>(82*(self.0%138)+52*(self.1%138)+self.2%138)%138,
            139=>(30*(self.0%139)+13*(self.1%139)+self.2%139)%139,
            140=>(116*(self.0%140)+16*(self.1%140)+self.2%140)%140,
            141=>(61*(self.0%141)+25*(self.1%141)+self.2%141)%141,
            142=>(100*(self.0%142)+10*(self.1%142)+self.2%142)%142,
            143=>(113*(self.0%143)+16*(self.1%143)+self.2%143)%143,
            144=>(112*(self.0%144)+16*(self.1%144)+self.2%144)%144,
            145=>(141*(self.0%145)+111*(self.1%145)+self.2%145)%145,
            146=>(4*(self.0%146)+2*(self.1%146)+self.2%146)%146,
            147=>(4*(self.0%147)+100*(self.1%147)+self.2%147)%147,
            148=>(144*(self.0%148)+12*(self.1%148)+self.2%148)%148,
            149=>(123*(self.0%149)+102*(self.1%149)+self.2%149)%149,
            150=>(106*(self.0%150)+16*(self.1%150)+self.2%150)%150,
            151=>(105*(self.0%151)+16*(self.1%151)+self.2%151)%151,
            152=>(80*(self.0%152)+112*(self.1%152)+self.2%152)%152,
            153=>(103*(self.0%153)+52*(self.1%153)+self.2%153)%153,
            154=>(102*(self.0%154)+16*(self.1%154)+self.2%154)%154,
            155=>(101*(self.0%155)+16*(self.1%155)+self.2%155)%155,
            156=>(100*(self.0%156)+16*(self.1%156)+self.2%156)%156,
            157=>(39*(self.0%157)+14*(self.1%157)+self.2%157)%157,
            158=>(152*(self.0%158)+130*(self.1%158)+self.2%158)%158,
            159=>(13*(self.0%159)+121*(self.1%159)+self.2%159)%159,
            160=>(96*(self.0%160)+96*(self.1%160)+self.2%160)%160,
            161=>(151*(self.0%161)+121*(self.1%161)+self.2%161)%161,
            162=>(112*(self.0%162)+52*(self.1%162)+self.2%162)%162,
            163=>(152*(self.0%163)+57*(self.1%163)+self.2%163)%163,
            164=>(92*(self.0%164)+16*(self.1%164)+self.2%164)%164,
            165=>(91*(self.0%165)+16*(self.1%165)+self.2%165)%165,
            166=>(134*(self.0%166)+36*(self.1%166)+self.2%166)%166,
            167=>(63*(self.0%167)+49*(self.1%167)+self.2%167)%167,
            168=>(88*(self.0%168)+16*(self.1%168)+self.2%168)%168,
            169=>(48*(self.0%169)+94*(self.1%169)+self.2%169)%169,
            170=>(86*(self.0%170)+86*(self.1%170)+self.2%170)%170,
            171=>(4*(self.0%171)+169*(self.1%171)+self.2%171)%171,
            172=>(4*(self.0%172)+84*(self.1%172)+self.2%172)%172,
            173=>(133*(self.0%173)+47*(self.1%173)+self.2%173)%173,
            174=>(112*(self.0%174)+82*(self.1%174)+self.2%174)%174,
            175=>(81*(self.0%175)+16*(self.1%175)+self.2%175)%175,
            176=>(80*(self.0%176)+16*(self.1%176)+self.2%176)%176,
            177=>(25*(self.0%177)+64*(self.1%177)+self.2%177)%177,
            178=>(128*(self.0%178)+156*(self.1%178)+self.2%178)%178,
            179=>(161*(self.0%179)+124*(self.1%179)+self.2%179)%179,
            180=>(76*(self.0%180)+16*(self.1%180)+self.2%180)%180,
            181=>(126*(self.0%181)+44*(self.1%181)+self.2%181)%181,
            182=>(74*(self.0%182)+16*(self.1%182)+self.2%182)%182,
            183=>(73*(self.0%183)+16*(self.1%183)+self.2%183)%183,
            184=>(128*(self.0%184)+144*(self.1%184)+self.2%184)%184,
            185=>(181*(self.0%185)+86*(self.1%185)+self.2%185)%185,
            186=>(70*(self.0%186)+16*(self.1%186)+self.2%186)%186,
            187=>(69*(self.0%187)+137*(self.1%187)+self.2%187)%187,
            188=>(108*(self.0%188)+72*(self.1%188)+self.2%188)%188,
            189=>(4*(self.0%189)+79*(self.1%189)+self.2%189)%189,
            190=>(156*(self.0%190)+36*(self.1%190)+self.2%190)%190,
            191=>(103*(self.0%191)+26*(self.1%191)+self.2%191)%191,
            192=>(64*(self.0%192)+64*(self.1%192)+self.2%192)%192,
            193=>(108*(self.0%193)+84*(self.1%193)+self.2%193)%193,
            194=>(132*(self.0%194)+158*(self.1%194)+self.2%194)%194,
            195=>(61*(self.0%195)+16*(self.1%195)+self.2%195)%195,
            196=>(4*(self.0%196)+100*(self.1%196)+self.2%196)%196,
            197=>(175*(self.0%197)+61*(self.1%197)+self.2%197)%197,
            198=>(58*(self.0%198)+16*(self.1%198)+self.2%198)%198,
            199=>(155*(self.0%199)+126*(self.1%199)+self.2%199)%199,
            211=>(119*(self.0%211)+69*(self.1%211)+self.2%211)%211,
            223=>(171*(self.0%223)+49*(self.1%223)+self.2%223)%223,
            227=>(147*(self.0%227)+104*(self.1%227)+self.2%227)%227,
            229=>(104*(self.0%229)+44*(self.1%229)+self.2%229)%229,
            233=>(135*(self.0%233)+64*(self.1%233)+self.2%233)%233,
            239=>(34*(self.0%239)+150*(self.1%239)+self.2%239)%239,
            241=>(15*(self.0%241)+225*(self.1%241)+self.2%241)%241,
            243=>(193*(self.0%243)+133*(self.1%243)+self.2%243)%243,
            251=>(243*(self.0%251)+69*(self.1%251)+self.2%251)%251,
            256=>(0*(self.0%256)+0*(self.1%256)+self.2%256)%256,
            257=>(1*(self.0%257)+1*(self.1%257)+self.2%257)%257,
            263=>(33*(self.0%263)+104*(self.1%263)+self.2%263)%263,
            269=>(21*(self.0%269)+57*(self.1%269)+self.2%269)%269,
            271=>(36*(self.0%271)+265*(self.1%271)+self.2%271)%271,
            277=>(155*(self.0%277)+175*(self.1%277)+self.2%277)%277,
            281=>(85*(self.0%281)+101*(self.1%281)+self.2%281)%281,
            283=>(151*(self.0%283)+240*(self.1%283)+self.2%283)%283,
            289=>(35*(self.0%289)+18*(self.1%289)+self.2%289)%289,
            293=>(161*(self.0%293)+109*(self.1%293)+self.2%293)%293,
            307=>(199*(self.0%307)+97*(self.1%307)+self.2%307)%307,
            311=>(35*(self.0%311)+208*(self.1%311)+self.2%311)%311,
            313=>(132*(self.0%313)+142*(self.1%313)+self.2%313)%313,
            317=>(235*(self.0%317)+251*(self.1%317)+self.2%317)%317,
            331=>(256*(self.0%331)+16*(self.1%331)+self.2%331)%331,
            337=>(4*(self.0%337)+2*(self.1%337)+self.2%337)%337,
            343=>(151*(self.0%343)+296*(self.1%343)+self.2%343)%343,
            347=>(129*(self.0%347)+167*(self.1%347)+self.2%347)%347,
            349=>(148*(self.0%349)+219*(self.1%349)+self.2%349)%349,
            353=>(22*(self.0%353)+187*(self.1%353)+self.2%353)%353,
            359=>(264*(self.0%359)+303*(self.1%359)+self.2%359)%359,
            361=>(156*(self.0%361)+321*(self.1%361)+self.2%361)%361,
            367=>(129*(self.0%367)+297*(self.1%367)+self.2%367)%367,
            373=>(68*(self.0%373)+21*(self.1%373)+self.2%373)%373,
            379=>(171*(self.0%379)+277*(self.1%379)+self.2%379)%379,
            383=>(150*(self.0%383)+143*(self.1%383)+self.2%383)%383,
            389=>(164*(self.0%389)+169*(self.1%389)+self.2%389)%389,
            397=>(273*(self.0%397)+99*(self.1%397)+self.2%397)%397,
            401=>(360*(self.0%401)+63*(self.1%401)+self.2%401)%401,
            409=>(265*(self.0%409)+80*(self.1%409)+self.2%409)%409,
            419=>(100*(self.0%419)+409*(self.1%419)+self.2%419)%419,
            421=>(255*(self.0%421)+26*(self.1%421)+self.2%421)%421,
            431=>(216*(self.0%431)+337*(self.1%431)+self.2%431)%431,
            433=>(150*(self.0%433)+296*(self.1%433)+self.2%433)%433,
            439=>(36*(self.0%439)+433*(self.1%439)+self.2%439)%439,
            443=>(153*(self.0%443)+215*(self.1%443)+self.2%443)%443,
            449=>(18*(self.0%449)+359*(self.1%449)+self.2%449)%449,
            457=>(68*(self.0%457)+215*(self.1%457)+self.2%457)%457,
            461=>(444*(self.0%461)+370*(self.1%461)+self.2%461)%461,
            463=>(60*(self.0%463)+261*(self.1%463)+self.2%463)%463,
            467=>(264*(self.0%467)+369*(self.1%467)+self.2%467)%467,
            479=>(28*(self.0%479)+403*(self.1%479)+self.2%479)%479,
            487=>(467*(self.0%487)+286*(self.1%487)+self.2%487)%487,
            491=>(429*(self.0%491)+263*(self.1%491)+self.2%491)%491,
            499=>(462*(self.0%499)+31*(self.1%499)+self.2%499)%499,
            _=>2
      }) as usize
    }
}
type BIG=BigUInt;
#
fn gcd(i:u32,j:BIG)->u32{//ensure i<j for better performance
    let (mut i,mut j)=(j.rem(i as u32) as u32,i);
    while i != 0{
      let t=j%i;
      j=i;
      i=t;
    }
    j
}
fn search_roll(b:Vec<BIG>,ix:u32,mut repeats:BIG)->(Vec<BIG>,BIG){
    let i=ix/gcd(ix,repeats);
    let b=if i>1{b.into_iter().map(|x|(0..i).map(|c|x.expand(repeats,c as u128)).filter(|x|ISPRIME).collect::<Vec<_>>()).flatten().collect::<Vec<_>>()}else{b};
    if i>1 {repeats=repeats.mul(i as u128)}
    (b,repeats)
}
fn search_once(b:&,mut upper:u32)->u32{
    let mut c=b.into_iter();
    c.next();
    let mut gg=vec!;
    let mut rem=vec!;
    let mut h=rem.drain(..);
    while let Some(hh)=h.next(){
      gg.push(hh);
      if hh>=upper{break}
    }
    for i in c{
      while gg.iter().copied().all(|t|ISPRIME){
            upper=h.next().unwrap();
            println!("found number= {:?} for n<{}!",i,upper);
            gg.push(upper);
      }
    }
    upper
}

tuneing const
#!
/*
LENGTH=500
a=*(LENGTH+1)
a=a=False
for i in range(2,LENGTH+1):
if a:
    for j in range(2,(LENGTH//i)+1):
      a=False

print(("const ISPRIME:= "%(LENGTH+1))+str(a).lower().replace(" ","")+";")

aa=
for i in :
j=i*i;
while j<=LENGTH:
    aa=True
    j*=i

for i in range(1,200):
    aa=True

#for u32
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]))
#for u64 array
print("\n".join(["            N=>(N2*((self.0)%N)+N1*((self.0)%N)+(self.0)%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]))
#for u64
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]))
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]))

*/
const ISPRIME:= ;
const UPPER:u32=180;
const HALF:u32=(UPPER>>1)+1;
const TO:u32=109;
fn main(){
    let mut lcm=BigUInt(0,0,2);
    for i in 3..HALF{
      lcm=lcm.mul((i/gcd(i,lcm)) as u128)
    }
    let mut x=(vec!,lcm);
    //x=search_roll(x.0,81,x.1);//3
    //x=search_roll(x.0,49,x.1);//7
    x=search_roll(x.0,121,x.1);//11
    x=search_roll(x.0,125,x.1);//2
    x=search_roll(x.0,128,x.1);//5
    x=search_roll(x.0,169,x.1);//13
    //x=search_roll(x.0,243,x.1);//3
    //x=search_roll(x.0,289,x.1);//17
    //x=search_roll(x.0,343,x.1);//7
    for i in HALF..=TO{
      x=search_roll(x.0,i,x.1);
      println!("i={},len={},rep={:?}",i,(x.0).len(),x.1);
      if (x.0).len()>10000000{println!("break at i={},TO={}",i,TO);break}
    }
    println!("SHOULD check `TO` and `i` carefully!");
    let (mut b,lcm)=x;
    b.sort_unstable();
    let mut upper=search_once(&b,179);
    for i in 0..10{
      println!("loop{} finished",i);
      b.iter_mut().for_each(|x|*x=x.add(lcm));
      upper=search_once(&b,upper);
    }
}
#
struct BigUInt(u64,u64,u64);
impl BigUInt{
    #
    pub fn add(self,other:Self)->Self{
      //self+other
      let l0=self.2 as u128+ other.2 as u128;
      let (l0,g)=(l0 as u64,l0>>64);
      let l1=self.1 as u128+g+other.1 as u128;
      let (l1,g)=(l1 as u64,l1>>64);
      BigUInt(self.0+g as u64+other.0 as u64,l1,l0)
    }
    #
    pub fn expand(self,other:Self,b:u128)->Self{
      //self+other*b
      let l0=self.2 as u128+(other.2 as u128)*b;
      let (l0,g)=(l0 as u64,l0>>64);
      let l1=self.1 as u128+g+(other.1 as u128)*b;
      let (l1,g)=(l1 as u64,l1>>64);
      BigUInt(self.0+g as u64+other.0*b as u64,l1,l0)
    }
    #
    pub fn mul(self,b:u128)->Self{
      //self*b
      let l0=(self.2 as u128)*b;
      let (l0,g)=(l0 as u64,l0>>64);
      let l1=g+(self.1 as u128)*b;
      let (l1,g)=(l1 as u64,l1>>64);
      BigUInt(g as u64+self.0*b as u64,l1,l0)
    }
    #
    pub fn rem(self,b:u32)->usize{
      (match b{
            1=>0,
            2=>(0*(self.0%2)+0*(self.1%2)+self.2%2)%2,
            3=>(1*(self.0%3)+1*(self.1%3)+self.2%3)%3,
            4=>(0*(self.0%4)+0*(self.1%4)+self.2%4)%4,
            5=>(1*(self.0%5)+1*(self.1%5)+self.2%5)%5,
            6=>(4*(self.0%6)+4*(self.1%6)+self.2%6)%6,
            7=>(4*(self.0%7)+2*(self.1%7)+self.2%7)%7,
            8=>(0*(self.0%8)+0*(self.1%8)+self.2%8)%8,
            9=>(4*(self.0%9)+7*(self.1%9)+self.2%9)%9,
            10=>(6*(self.0%10)+6*(self.1%10)+self.2%10)%10,
            11=>(3*(self.0%11)+5*(self.1%11)+self.2%11)%11,
            12=>(4*(self.0%12)+4*(self.1%12)+self.2%12)%12,
            13=>(9*(self.0%13)+3*(self.1%13)+self.2%13)%13,
            14=>(4*(self.0%14)+2*(self.1%14)+self.2%14)%14,
            15=>(1*(self.0%15)+1*(self.1%15)+self.2%15)%15,
            16=>(0*(self.0%16)+0*(self.1%16)+self.2%16)%16,
            17=>(1*(self.0%17)+1*(self.1%17)+self.2%17)%17,
            18=>(4*(self.0%18)+16*(self.1%18)+self.2%18)%18,
            19=>(4*(self.0%19)+17*(self.1%19)+self.2%19)%19,
            20=>(16*(self.0%20)+16*(self.1%20)+self.2%20)%20,
            21=>(4*(self.0%21)+16*(self.1%21)+self.2%21)%21,
            22=>(14*(self.0%22)+16*(self.1%22)+self.2%22)%22,
            23=>(13*(self.0%23)+6*(self.1%23)+self.2%23)%23,
            24=>(16*(self.0%24)+16*(self.1%24)+self.2%24)%24,
            25=>(6*(self.0%25)+16*(self.1%25)+self.2%25)%25,
            26=>(22*(self.0%26)+16*(self.1%26)+self.2%26)%26,
            27=>(4*(self.0%27)+25*(self.1%27)+self.2%27)%27,
            28=>(4*(self.0%28)+16*(self.1%28)+self.2%28)%28,
            29=>(25*(self.0%29)+24*(self.1%29)+self.2%29)%29,
            30=>(16*(self.0%30)+16*(self.1%30)+self.2%30)%30,
            31=>(8*(self.0%31)+16*(self.1%31)+self.2%31)%31,
            32=>(0*(self.0%32)+0*(self.1%32)+self.2%32)%32,
            33=>(25*(self.0%33)+16*(self.1%33)+self.2%33)%33,
            34=>(18*(self.0%34)+18*(self.1%34)+self.2%34)%34,
            35=>(11*(self.0%35)+16*(self.1%35)+self.2%35)%35,
            36=>(4*(self.0%36)+16*(self.1%36)+self.2%36)%36,
            37=>(33*(self.0%37)+12*(self.1%37)+self.2%37)%37,
            38=>(4*(self.0%38)+36*(self.1%38)+self.2%38)%38,
            39=>(22*(self.0%39)+16*(self.1%39)+self.2%39)%39,
            40=>(16*(self.0%40)+16*(self.1%40)+self.2%40)%40,
            41=>(10*(self.0%41)+16*(self.1%41)+self.2%41)%41,
            42=>(4*(self.0%42)+16*(self.1%42)+self.2%42)%42,
            43=>(4*(self.0%43)+41*(self.1%43)+self.2%43)%43,
            44=>(36*(self.0%44)+16*(self.1%44)+self.2%44)%44,
            45=>(31*(self.0%45)+16*(self.1%45)+self.2%45)%45,
            46=>(36*(self.0%46)+6*(self.1%46)+self.2%46)%46,
            47=>(14*(self.0%47)+25*(self.1%47)+self.2%47)%47,
            48=>(16*(self.0%48)+16*(self.1%48)+self.2%48)%48,
            49=>(4*(self.0%49)+2*(self.1%49)+self.2%49)%49,
            50=>(6*(self.0%50)+16*(self.1%50)+self.2%50)%50,
            51=>(1*(self.0%51)+1*(self.1%51)+self.2%51)%51,
            52=>(48*(self.0%52)+16*(self.1%52)+self.2%52)%52,
            53=>(13*(self.0%53)+15*(self.1%53)+self.2%53)%53,
            54=>(4*(self.0%54)+52*(self.1%54)+self.2%54)%54,
            55=>(36*(self.0%55)+16*(self.1%55)+self.2%55)%55,
            56=>(32*(self.0%56)+16*(self.1%56)+self.2%56)%56,
            57=>(4*(self.0%57)+55*(self.1%57)+self.2%57)%57,
            58=>(54*(self.0%58)+24*(self.1%58)+self.2%58)%58,
            59=>(25*(self.0%59)+5*(self.1%59)+self.2%59)%59,
            60=>(16*(self.0%60)+16*(self.1%60)+self.2%60)%60,
            61=>(12*(self.0%61)+16*(self.1%61)+self.2%61)%61,
            62=>(8*(self.0%62)+16*(self.1%62)+self.2%62)%62,
            63=>(4*(self.0%63)+16*(self.1%63)+self.2%63)%63,
            64=>(0*(self.0%64)+0*(self.1%64)+self.2%64)%64,
            65=>(61*(self.0%65)+16*(self.1%65)+self.2%65)%65,
            66=>(58*(self.0%66)+16*(self.1%66)+self.2%66)%66,
            67=>(21*(self.0%67)+17*(self.1%67)+self.2%67)%67,
            68=>(52*(self.0%68)+52*(self.1%68)+self.2%68)%68,
            69=>(13*(self.0%69)+52*(self.1%69)+self.2%69)%69,
            70=>(46*(self.0%70)+16*(self.1%70)+self.2%70)%70,
            71=>(29*(self.0%71)+10*(self.1%71)+self.2%71)%71,
            72=>(40*(self.0%72)+16*(self.1%72)+self.2%72)%72,
            73=>(4*(self.0%73)+2*(self.1%73)+self.2%73)%73,
            74=>(70*(self.0%74)+12*(self.1%74)+self.2%74)%74,
            75=>(31*(self.0%75)+16*(self.1%75)+self.2%75)%75,
            76=>(4*(self.0%76)+36*(self.1%76)+self.2%76)%76,
            77=>(25*(self.0%77)+16*(self.1%77)+self.2%77)%77,
            78=>(22*(self.0%78)+16*(self.1%78)+self.2%78)%78,
            79=>(73*(self.0%79)+51*(self.1%79)+self.2%79)%79,
            80=>(16*(self.0%80)+16*(self.1%80)+self.2%80)%80,
            81=>(31*(self.0%81)+52*(self.1%81)+self.2%81)%81,
            82=>(10*(self.0%82)+16*(self.1%82)+self.2%82)%82,
            83=>(51*(self.0%83)+36*(self.1%83)+self.2%83)%83,
            84=>(4*(self.0%84)+16*(self.1%84)+self.2%84)%84,
            85=>(1*(self.0%85)+1*(self.1%85)+self.2%85)%85,
            86=>(4*(self.0%86)+84*(self.1%86)+self.2%86)%86,
            87=>(25*(self.0%87)+82*(self.1%87)+self.2%87)%87,
            88=>(80*(self.0%88)+16*(self.1%88)+self.2%88)%88,
            89=>(39*(self.0%89)+67*(self.1%89)+self.2%89)%89,
            90=>(76*(self.0%90)+16*(self.1%90)+self.2%90)%90,
            91=>(74*(self.0%91)+16*(self.1%91)+self.2%91)%91,
            92=>(36*(self.0%92)+52*(self.1%92)+self.2%92)%92,
            93=>(70*(self.0%93)+16*(self.1%93)+self.2%93)%93,
            94=>(14*(self.0%94)+72*(self.1%94)+self.2%94)%94,
            95=>(61*(self.0%95)+36*(self.1%95)+self.2%95)%95,
            96=>(64*(self.0%96)+64*(self.1%96)+self.2%96)%96,
            97=>(35*(self.0%97)+61*(self.1%97)+self.2%97)%97,
            98=>(4*(self.0%98)+2*(self.1%98)+self.2%98)%98,
            99=>(58*(self.0%99)+16*(self.1%99)+self.2%99)%99,
            100=>(56*(self.0%100)+16*(self.1%100)+self.2%100)%100,
            101=>(80*(self.0%101)+79*(self.1%101)+self.2%101)%101,
            102=>(52*(self.0%102)+52*(self.1%102)+self.2%102)%102,
            103=>(38*(self.0%103)+55*(self.1%103)+self.2%103)%103,
            104=>(48*(self.0%104)+16*(self.1%104)+self.2%104)%104,
            105=>(46*(self.0%105)+16*(self.1%105)+self.2%105)%105,
            106=>(66*(self.0%106)+68*(self.1%106)+self.2%106)%106,
            107=>(11*(self.0%107)+92*(self.1%107)+self.2%107)%107,
            108=>(4*(self.0%108)+52*(self.1%108)+self.2%108)%108,
            109=>(105*(self.0%109)+66*(self.1%109)+self.2%109)%109,
            110=>(36*(self.0%110)+16*(self.1%110)+self.2%110)%110,
            111=>(70*(self.0%111)+49*(self.1%111)+self.2%111)%111,
            112=>(32*(self.0%112)+16*(self.1%112)+self.2%112)%112,
            113=>(109*(self.0%113)+30*(self.1%113)+self.2%113)%113,
            114=>(4*(self.0%114)+112*(self.1%114)+self.2%114)%114,
            115=>(36*(self.0%115)+6*(self.1%115)+self.2%115)%115,
            116=>(112*(self.0%116)+24*(self.1%116)+self.2%116)%116,
            117=>(22*(self.0%117)+16*(self.1%117)+self.2%117)%117,
            118=>(84*(self.0%118)+64*(self.1%118)+self.2%118)%118,
            119=>(18*(self.0%119)+86*(self.1%119)+self.2%119)%119,
            120=>(16*(self.0%120)+16*(self.1%120)+self.2%120)%120,
            121=>(58*(self.0%121)+93*(self.1%121)+self.2%121)%121,
            122=>(12*(self.0%122)+16*(self.1%122)+self.2%122)%122,
            123=>(10*(self.0%123)+16*(self.1%123)+self.2%123)%123,
            124=>(8*(self.0%124)+16*(self.1%124)+self.2%124)%124,
            125=>(81*(self.0%125)+116*(self.1%125)+self.2%125)%125,
            126=>(4*(self.0%126)+16*(self.1%126)+self.2%126)%126,
            127=>(4*(self.0%127)+2*(self.1%127)+self.2%127)%127,
            128=>(0*(self.0%128)+0*(self.1%128)+self.2%128)%128,
            129=>(4*(self.0%129)+127*(self.1%129)+self.2%129)%129,
            130=>(126*(self.0%130)+16*(self.1%130)+self.2%130)%130,
            131=>(33*(self.0%131)+65*(self.1%131)+self.2%131)%131,
            132=>(124*(self.0%132)+16*(self.1%132)+self.2%132)%132,
            133=>(4*(self.0%133)+93*(self.1%133)+self.2%133)%133,
            134=>(88*(self.0%134)+84*(self.1%134)+self.2%134)%134,
            135=>(31*(self.0%135)+106*(self.1%135)+self.2%135)%135,
            136=>(120*(self.0%136)+120*(self.1%136)+self.2%136)%136,
            137=>(38*(self.0%137)+60*(self.1%137)+self.2%137)%137,
            138=>(82*(self.0%138)+52*(self.1%138)+self.2%138)%138,
            139=>(30*(self.0%139)+13*(self.1%139)+self.2%139)%139,
            140=>(116*(self.0%140)+16*(self.1%140)+self.2%140)%140,
            141=>(61*(self.0%141)+25*(self.1%141)+self.2%141)%141,
            142=>(100*(self.0%142)+10*(self.1%142)+self.2%142)%142,
            143=>(113*(self.0%143)+16*(self.1%143)+self.2%143)%143,
            144=>(112*(self.0%144)+16*(self.1%144)+self.2%144)%144,
            145=>(141*(self.0%145)+111*(self.1%145)+self.2%145)%145,
            146=>(4*(self.0%146)+2*(self.1%146)+self.2%146)%146,
            147=>(4*(self.0%147)+100*(self.1%147)+self.2%147)%147,
            148=>(144*(self.0%148)+12*(self.1%148)+self.2%148)%148,
            149=>(123*(self.0%149)+102*(self.1%149)+self.2%149)%149,
            150=>(106*(self.0%150)+16*(self.1%150)+self.2%150)%150,
            151=>(105*(self.0%151)+16*(self.1%151)+self.2%151)%151,
            152=>(80*(self.0%152)+112*(self.1%152)+self.2%152)%152,
            153=>(103*(self.0%153)+52*(self.1%153)+self.2%153)%153,
            154=>(102*(self.0%154)+16*(self.1%154)+self.2%154)%154,
            155=>(101*(self.0%155)+16*(self.1%155)+self.2%155)%155,
            156=>(100*(self.0%156)+16*(self.1%156)+self.2%156)%156,
            157=>(39*(self.0%157)+14*(self.1%157)+self.2%157)%157,
            158=>(152*(self.0%158)+130*(self.1%158)+self.2%158)%158,
            159=>(13*(self.0%159)+121*(self.1%159)+self.2%159)%159,
            160=>(96*(self.0%160)+96*(self.1%160)+self.2%160)%160,
            161=>(151*(self.0%161)+121*(self.1%161)+self.2%161)%161,
            162=>(112*(self.0%162)+52*(self.1%162)+self.2%162)%162,
            163=>(152*(self.0%163)+57*(self.1%163)+self.2%163)%163,
            164=>(92*(self.0%164)+16*(self.1%164)+self.2%164)%164,
            165=>(91*(self.0%165)+16*(self.1%165)+self.2%165)%165,
            166=>(134*(self.0%166)+36*(self.1%166)+self.2%166)%166,
            167=>(63*(self.0%167)+49*(self.1%167)+self.2%167)%167,
            168=>(88*(self.0%168)+16*(self.1%168)+self.2%168)%168,
            169=>(48*(self.0%169)+94*(self.1%169)+self.2%169)%169,
            170=>(86*(self.0%170)+86*(self.1%170)+self.2%170)%170,
            171=>(4*(self.0%171)+169*(self.1%171)+self.2%171)%171,
            172=>(4*(self.0%172)+84*(self.1%172)+self.2%172)%172,
            173=>(133*(self.0%173)+47*(self.1%173)+self.2%173)%173,
            174=>(112*(self.0%174)+82*(self.1%174)+self.2%174)%174,
            175=>(81*(self.0%175)+16*(self.1%175)+self.2%175)%175,
            176=>(80*(self.0%176)+16*(self.1%176)+self.2%176)%176,
            177=>(25*(self.0%177)+64*(self.1%177)+self.2%177)%177,
            178=>(128*(self.0%178)+156*(self.1%178)+self.2%178)%178,
            179=>(161*(self.0%179)+124*(self.1%179)+self.2%179)%179,
            180=>(76*(self.0%180)+16*(self.1%180)+self.2%180)%180,
            181=>(126*(self.0%181)+44*(self.1%181)+self.2%181)%181,
            182=>(74*(self.0%182)+16*(self.1%182)+self.2%182)%182,
            183=>(73*(self.0%183)+16*(self.1%183)+self.2%183)%183,
            184=>(128*(self.0%184)+144*(self.1%184)+self.2%184)%184,
            185=>(181*(self.0%185)+86*(self.1%185)+self.2%185)%185,
            186=>(70*(self.0%186)+16*(self.1%186)+self.2%186)%186,
            187=>(69*(self.0%187)+137*(self.1%187)+self.2%187)%187,
            188=>(108*(self.0%188)+72*(self.1%188)+self.2%188)%188,
            189=>(4*(self.0%189)+79*(self.1%189)+self.2%189)%189,
            190=>(156*(self.0%190)+36*(self.1%190)+self.2%190)%190,
            191=>(103*(self.0%191)+26*(self.1%191)+self.2%191)%191,
            192=>(64*(self.0%192)+64*(self.1%192)+self.2%192)%192,
            193=>(108*(self.0%193)+84*(self.1%193)+self.2%193)%193,
            194=>(132*(self.0%194)+158*(self.1%194)+self.2%194)%194,
            195=>(61*(self.0%195)+16*(self.1%195)+self.2%195)%195,
            196=>(4*(self.0%196)+100*(self.1%196)+self.2%196)%196,
            197=>(175*(self.0%197)+61*(self.1%197)+self.2%197)%197,
            198=>(58*(self.0%198)+16*(self.1%198)+self.2%198)%198,
            199=>(155*(self.0%199)+126*(self.1%199)+self.2%199)%199,
            211=>(119*(self.0%211)+69*(self.1%211)+self.2%211)%211,
            223=>(171*(self.0%223)+49*(self.1%223)+self.2%223)%223,
            227=>(147*(self.0%227)+104*(self.1%227)+self.2%227)%227,
            229=>(104*(self.0%229)+44*(self.1%229)+self.2%229)%229,
            233=>(135*(self.0%233)+64*(self.1%233)+self.2%233)%233,
            239=>(34*(self.0%239)+150*(self.1%239)+self.2%239)%239,
            241=>(15*(self.0%241)+225*(self.1%241)+self.2%241)%241,
            243=>(193*(self.0%243)+133*(self.1%243)+self.2%243)%243,
            251=>(243*(self.0%251)+69*(self.1%251)+self.2%251)%251,
            256=>(0*(self.0%256)+0*(self.1%256)+self.2%256)%256,
            257=>(1*(self.0%257)+1*(self.1%257)+self.2%257)%257,
            263=>(33*(self.0%263)+104*(self.1%263)+self.2%263)%263,
            269=>(21*(self.0%269)+57*(self.1%269)+self.2%269)%269,
            271=>(36*(self.0%271)+265*(self.1%271)+self.2%271)%271,
            277=>(155*(self.0%277)+175*(self.1%277)+self.2%277)%277,
            281=>(85*(self.0%281)+101*(self.1%281)+self.2%281)%281,
            283=>(151*(self.0%283)+240*(self.1%283)+self.2%283)%283,
            289=>(35*(self.0%289)+18*(self.1%289)+self.2%289)%289,
            293=>(161*(self.0%293)+109*(self.1%293)+self.2%293)%293,
            307=>(199*(self.0%307)+97*(self.1%307)+self.2%307)%307,
            311=>(35*(self.0%311)+208*(self.1%311)+self.2%311)%311,
            313=>(132*(self.0%313)+142*(self.1%313)+self.2%313)%313,
            317=>(235*(self.0%317)+251*(self.1%317)+self.2%317)%317,
            331=>(256*(self.0%331)+16*(self.1%331)+self.2%331)%331,
            337=>(4*(self.0%337)+2*(self.1%337)+self.2%337)%337,
            343=>(151*(self.0%343)+296*(self.1%343)+self.2%343)%343,
            347=>(129*(self.0%347)+167*(self.1%347)+self.2%347)%347,
            349=>(148*(self.0%349)+219*(self.1%349)+self.2%349)%349,
            353=>(22*(self.0%353)+187*(self.1%353)+self.2%353)%353,
            359=>(264*(self.0%359)+303*(self.1%359)+self.2%359)%359,
            361=>(156*(self.0%361)+321*(self.1%361)+self.2%361)%361,
            367=>(129*(self.0%367)+297*(self.1%367)+self.2%367)%367,
            373=>(68*(self.0%373)+21*(self.1%373)+self.2%373)%373,
            379=>(171*(self.0%379)+277*(self.1%379)+self.2%379)%379,
            383=>(150*(self.0%383)+143*(self.1%383)+self.2%383)%383,
            389=>(164*(self.0%389)+169*(self.1%389)+self.2%389)%389,
            397=>(273*(self.0%397)+99*(self.1%397)+self.2%397)%397,
            401=>(360*(self.0%401)+63*(self.1%401)+self.2%401)%401,
            409=>(265*(self.0%409)+80*(self.1%409)+self.2%409)%409,
            419=>(100*(self.0%419)+409*(self.1%419)+self.2%419)%419,
            421=>(255*(self.0%421)+26*(self.1%421)+self.2%421)%421,
            431=>(216*(self.0%431)+337*(self.1%431)+self.2%431)%431,
            433=>(150*(self.0%433)+296*(self.1%433)+self.2%433)%433,
            439=>(36*(self.0%439)+433*(self.1%439)+self.2%439)%439,
            443=>(153*(self.0%443)+215*(self.1%443)+self.2%443)%443,
            449=>(18*(self.0%449)+359*(self.1%449)+self.2%449)%449,
            457=>(68*(self.0%457)+215*(self.1%457)+self.2%457)%457,
            461=>(444*(self.0%461)+370*(self.1%461)+self.2%461)%461,
            463=>(60*(self.0%463)+261*(self.1%463)+self.2%463)%463,
            467=>(264*(self.0%467)+369*(self.1%467)+self.2%467)%467,
            479=>(28*(self.0%479)+403*(self.1%479)+self.2%479)%479,
            487=>(467*(self.0%487)+286*(self.1%487)+self.2%487)%487,
            491=>(429*(self.0%491)+263*(self.1%491)+self.2%491)%491,
            499=>(462*(self.0%499)+31*(self.1%499)+self.2%499)%499,
            _=>2
      }) as usize
    }
}
type BIG=BigUInt;
#
fn gcd(i:u32,j:BIG)->u32{//ensure i<j for better performance
    let (mut i,mut j)=(j.rem(i as u32) as u32,i);
    while i != 0{
      let t=j%i;
      j=i;
      i=t;
    }
    j
}
fn search_roll(b:Vec<BIG>,ix:u32,mut repeats:BIG)->(Vec<BIG>,BIG){
    let i=ix/gcd(ix,repeats);
    let b=if i>1{b.into_iter().map(|x|(0..i).map(|c|x.expand(repeats,c as u128)).filter(|x|ISPRIME).collect::<Vec<_>>()).flatten().collect::<Vec<_>>()}else{b};
    if i>1 {repeats=repeats.mul(i as u128)}
    (b,repeats)
}
fn search_once(b:&,mut upper:u32)->u32{
    let mut c=b.into_iter();
    c.next();
    let mut gg=vec!;
    let mut rem=vec!;
    let mut h=rem.drain(..);
    while let Some(hh)=h.next(){
      gg.push(hh);
      if hh>=upper{break}
    }
    for i in c{
      while gg.iter().copied().all(|t|ISPRIME){
            upper=h.next().unwrap();
            println!("found number= {:?} for n<{}!",i,upper);
            gg.push(upper);
      }
    }
    upper
}



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 01:32:13

using Rayon to the 194 gap(n%97 thus = 2)
header
/*
LENGTH=500
a=*(LENGTH+1)
a=a=False
for i in range(2,LENGTH+1):
if a:
    for j in range(2,(LENGTH//i)+1):
      a=False

print(("const ISPRIME:= "%(LENGTH+1))+str(a).lower().replace(" ","")+";")

aa=
for i in :
j=i*i;
while j<=LENGTH:
    aa=True
    j*=i

for i in range(1,200):
    aa=True

#for u32
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]))
#for u64 array
print("\n".join(["            N=>(N2*((self.0)%N)+N1*((self.0)%N)+(self.0)%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]))
#for u64
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]))
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]))

*/
const ISPRIME:= ;
#
struct BigUInt(u64,u64,u64);
impl BigUInt{
    #
    pub fn add(self,other:Self)->Self{
      //self+other
      let l0=self.2 as u128+ other.2 as u128;
      let (l0,g)=(l0 as u64,l0>>64);
      let l1=self.1 as u128+g+other.1 as u128;
      let (l1,g)=(l1 as u64,l1>>64);
      BigUInt(self.0+g as u64+other.0 as u64,l1,l0)
    }
    #
    pub fn expand(self,other:Self,b:u128)->Self{
      //self+other*b
      let l0=self.2 as u128+(other.2 as u128)*b;
      let (l0,g)=(l0 as u64,l0>>64);
      let l1=self.1 as u128+g+(other.1 as u128)*b;
      let (l1,g)=(l1 as u64,l1>>64);
      BigUInt(self.0+g as u64+other.0*b as u64,l1,l0)
    }
    #
    pub fn mul(self,b:u128)->Self{
      //self*b
      let l0=(self.2 as u128)*b;
      let (l0,g)=(l0 as u64,l0>>64);
      let l1=g+(self.1 as u128)*b;
      let (l1,g)=(l1 as u64,l1>>64);
      BigUInt(g as u64+self.0*b as u64,l1,l0)
    }
    #
    pub fn rem(self,b:u32)->usize{
      (match b{
            1=>0,
            2=>(0*(self.0%2)+0*(self.1%2)+self.2%2)%2,
            3=>(1*(self.0%3)+1*(self.1%3)+self.2%3)%3,
            4=>(0*(self.0%4)+0*(self.1%4)+self.2%4)%4,
            5=>(1*(self.0%5)+1*(self.1%5)+self.2%5)%5,
            6=>(4*(self.0%6)+4*(self.1%6)+self.2%6)%6,
            7=>(4*(self.0%7)+2*(self.1%7)+self.2%7)%7,
            8=>(0*(self.0%8)+0*(self.1%8)+self.2%8)%8,
            9=>(4*(self.0%9)+7*(self.1%9)+self.2%9)%9,
            10=>(6*(self.0%10)+6*(self.1%10)+self.2%10)%10,
            11=>(3*(self.0%11)+5*(self.1%11)+self.2%11)%11,
            12=>(4*(self.0%12)+4*(self.1%12)+self.2%12)%12,
            13=>(9*(self.0%13)+3*(self.1%13)+self.2%13)%13,
            14=>(4*(self.0%14)+2*(self.1%14)+self.2%14)%14,
            15=>(1*(self.0%15)+1*(self.1%15)+self.2%15)%15,
            16=>(0*(self.0%16)+0*(self.1%16)+self.2%16)%16,
            17=>(1*(self.0%17)+1*(self.1%17)+self.2%17)%17,
            18=>(4*(self.0%18)+16*(self.1%18)+self.2%18)%18,
            19=>(4*(self.0%19)+17*(self.1%19)+self.2%19)%19,
            20=>(16*(self.0%20)+16*(self.1%20)+self.2%20)%20,
            21=>(4*(self.0%21)+16*(self.1%21)+self.2%21)%21,
            22=>(14*(self.0%22)+16*(self.1%22)+self.2%22)%22,
            23=>(13*(self.0%23)+6*(self.1%23)+self.2%23)%23,
            24=>(16*(self.0%24)+16*(self.1%24)+self.2%24)%24,
            25=>(6*(self.0%25)+16*(self.1%25)+self.2%25)%25,
            26=>(22*(self.0%26)+16*(self.1%26)+self.2%26)%26,
            27=>(4*(self.0%27)+25*(self.1%27)+self.2%27)%27,
            28=>(4*(self.0%28)+16*(self.1%28)+self.2%28)%28,
            29=>(25*(self.0%29)+24*(self.1%29)+self.2%29)%29,
            30=>(16*(self.0%30)+16*(self.1%30)+self.2%30)%30,
            31=>(8*(self.0%31)+16*(self.1%31)+self.2%31)%31,
            32=>(0*(self.0%32)+0*(self.1%32)+self.2%32)%32,
            33=>(25*(self.0%33)+16*(self.1%33)+self.2%33)%33,
            34=>(18*(self.0%34)+18*(self.1%34)+self.2%34)%34,
            35=>(11*(self.0%35)+16*(self.1%35)+self.2%35)%35,
            36=>(4*(self.0%36)+16*(self.1%36)+self.2%36)%36,
            37=>(33*(self.0%37)+12*(self.1%37)+self.2%37)%37,
            38=>(4*(self.0%38)+36*(self.1%38)+self.2%38)%38,
            39=>(22*(self.0%39)+16*(self.1%39)+self.2%39)%39,
            40=>(16*(self.0%40)+16*(self.1%40)+self.2%40)%40,
            41=>(10*(self.0%41)+16*(self.1%41)+self.2%41)%41,
            42=>(4*(self.0%42)+16*(self.1%42)+self.2%42)%42,
            43=>(4*(self.0%43)+41*(self.1%43)+self.2%43)%43,
            44=>(36*(self.0%44)+16*(self.1%44)+self.2%44)%44,
            45=>(31*(self.0%45)+16*(self.1%45)+self.2%45)%45,
            46=>(36*(self.0%46)+6*(self.1%46)+self.2%46)%46,
            47=>(14*(self.0%47)+25*(self.1%47)+self.2%47)%47,
            48=>(16*(self.0%48)+16*(self.1%48)+self.2%48)%48,
            49=>(4*(self.0%49)+2*(self.1%49)+self.2%49)%49,
            50=>(6*(self.0%50)+16*(self.1%50)+self.2%50)%50,
            51=>(1*(self.0%51)+1*(self.1%51)+self.2%51)%51,
            52=>(48*(self.0%52)+16*(self.1%52)+self.2%52)%52,
            53=>(13*(self.0%53)+15*(self.1%53)+self.2%53)%53,
            54=>(4*(self.0%54)+52*(self.1%54)+self.2%54)%54,
            55=>(36*(self.0%55)+16*(self.1%55)+self.2%55)%55,
            56=>(32*(self.0%56)+16*(self.1%56)+self.2%56)%56,
            57=>(4*(self.0%57)+55*(self.1%57)+self.2%57)%57,
            58=>(54*(self.0%58)+24*(self.1%58)+self.2%58)%58,
            59=>(25*(self.0%59)+5*(self.1%59)+self.2%59)%59,
            60=>(16*(self.0%60)+16*(self.1%60)+self.2%60)%60,
            61=>(12*(self.0%61)+16*(self.1%61)+self.2%61)%61,
            62=>(8*(self.0%62)+16*(self.1%62)+self.2%62)%62,
            63=>(4*(self.0%63)+16*(self.1%63)+self.2%63)%63,
            64=>(0*(self.0%64)+0*(self.1%64)+self.2%64)%64,
            65=>(61*(self.0%65)+16*(self.1%65)+self.2%65)%65,
            66=>(58*(self.0%66)+16*(self.1%66)+self.2%66)%66,
            67=>(21*(self.0%67)+17*(self.1%67)+self.2%67)%67,
            68=>(52*(self.0%68)+52*(self.1%68)+self.2%68)%68,
            69=>(13*(self.0%69)+52*(self.1%69)+self.2%69)%69,
            70=>(46*(self.0%70)+16*(self.1%70)+self.2%70)%70,
            71=>(29*(self.0%71)+10*(self.1%71)+self.2%71)%71,
            72=>(40*(self.0%72)+16*(self.1%72)+self.2%72)%72,
            73=>(4*(self.0%73)+2*(self.1%73)+self.2%73)%73,
            74=>(70*(self.0%74)+12*(self.1%74)+self.2%74)%74,
            75=>(31*(self.0%75)+16*(self.1%75)+self.2%75)%75,
            76=>(4*(self.0%76)+36*(self.1%76)+self.2%76)%76,
            77=>(25*(self.0%77)+16*(self.1%77)+self.2%77)%77,
            78=>(22*(self.0%78)+16*(self.1%78)+self.2%78)%78,
            79=>(73*(self.0%79)+51*(self.1%79)+self.2%79)%79,
            80=>(16*(self.0%80)+16*(self.1%80)+self.2%80)%80,
            81=>(31*(self.0%81)+52*(self.1%81)+self.2%81)%81,
            82=>(10*(self.0%82)+16*(self.1%82)+self.2%82)%82,
            83=>(51*(self.0%83)+36*(self.1%83)+self.2%83)%83,
            84=>(4*(self.0%84)+16*(self.1%84)+self.2%84)%84,
            85=>(1*(self.0%85)+1*(self.1%85)+self.2%85)%85,
            86=>(4*(self.0%86)+84*(self.1%86)+self.2%86)%86,
            87=>(25*(self.0%87)+82*(self.1%87)+self.2%87)%87,
            88=>(80*(self.0%88)+16*(self.1%88)+self.2%88)%88,
            89=>(39*(self.0%89)+67*(self.1%89)+self.2%89)%89,
            90=>(76*(self.0%90)+16*(self.1%90)+self.2%90)%90,
            91=>(74*(self.0%91)+16*(self.1%91)+self.2%91)%91,
            92=>(36*(self.0%92)+52*(self.1%92)+self.2%92)%92,
            93=>(70*(self.0%93)+16*(self.1%93)+self.2%93)%93,
            94=>(14*(self.0%94)+72*(self.1%94)+self.2%94)%94,
            95=>(61*(self.0%95)+36*(self.1%95)+self.2%95)%95,
            96=>(64*(self.0%96)+64*(self.1%96)+self.2%96)%96,
            97=>(35*(self.0%97)+61*(self.1%97)+self.2%97)%97,
            98=>(4*(self.0%98)+2*(self.1%98)+self.2%98)%98,
            99=>(58*(self.0%99)+16*(self.1%99)+self.2%99)%99,
            100=>(56*(self.0%100)+16*(self.1%100)+self.2%100)%100,
            101=>(80*(self.0%101)+79*(self.1%101)+self.2%101)%101,
            102=>(52*(self.0%102)+52*(self.1%102)+self.2%102)%102,
            103=>(38*(self.0%103)+55*(self.1%103)+self.2%103)%103,
            104=>(48*(self.0%104)+16*(self.1%104)+self.2%104)%104,
            105=>(46*(self.0%105)+16*(self.1%105)+self.2%105)%105,
            106=>(66*(self.0%106)+68*(self.1%106)+self.2%106)%106,
            107=>(11*(self.0%107)+92*(self.1%107)+self.2%107)%107,
            108=>(4*(self.0%108)+52*(self.1%108)+self.2%108)%108,
            109=>(105*(self.0%109)+66*(self.1%109)+self.2%109)%109,
            110=>(36*(self.0%110)+16*(self.1%110)+self.2%110)%110,
            111=>(70*(self.0%111)+49*(self.1%111)+self.2%111)%111,
            112=>(32*(self.0%112)+16*(self.1%112)+self.2%112)%112,
            113=>(109*(self.0%113)+30*(self.1%113)+self.2%113)%113,
            114=>(4*(self.0%114)+112*(self.1%114)+self.2%114)%114,
            115=>(36*(self.0%115)+6*(self.1%115)+self.2%115)%115,
            116=>(112*(self.0%116)+24*(self.1%116)+self.2%116)%116,
            117=>(22*(self.0%117)+16*(self.1%117)+self.2%117)%117,
            118=>(84*(self.0%118)+64*(self.1%118)+self.2%118)%118,
            119=>(18*(self.0%119)+86*(self.1%119)+self.2%119)%119,
            120=>(16*(self.0%120)+16*(self.1%120)+self.2%120)%120,
            121=>(58*(self.0%121)+93*(self.1%121)+self.2%121)%121,
            122=>(12*(self.0%122)+16*(self.1%122)+self.2%122)%122,
            123=>(10*(self.0%123)+16*(self.1%123)+self.2%123)%123,
            124=>(8*(self.0%124)+16*(self.1%124)+self.2%124)%124,
            125=>(81*(self.0%125)+116*(self.1%125)+self.2%125)%125,
            126=>(4*(self.0%126)+16*(self.1%126)+self.2%126)%126,
            127=>(4*(self.0%127)+2*(self.1%127)+self.2%127)%127,
            128=>(0*(self.0%128)+0*(self.1%128)+self.2%128)%128,
            129=>(4*(self.0%129)+127*(self.1%129)+self.2%129)%129,
            130=>(126*(self.0%130)+16*(self.1%130)+self.2%130)%130,
            131=>(33*(self.0%131)+65*(self.1%131)+self.2%131)%131,
            132=>(124*(self.0%132)+16*(self.1%132)+self.2%132)%132,
            133=>(4*(self.0%133)+93*(self.1%133)+self.2%133)%133,
            134=>(88*(self.0%134)+84*(self.1%134)+self.2%134)%134,
            135=>(31*(self.0%135)+106*(self.1%135)+self.2%135)%135,
            136=>(120*(self.0%136)+120*(self.1%136)+self.2%136)%136,
            137=>(38*(self.0%137)+60*(self.1%137)+self.2%137)%137,
            138=>(82*(self.0%138)+52*(self.1%138)+self.2%138)%138,
            139=>(30*(self.0%139)+13*(self.1%139)+self.2%139)%139,
            140=>(116*(self.0%140)+16*(self.1%140)+self.2%140)%140,
            141=>(61*(self.0%141)+25*(self.1%141)+self.2%141)%141,
            142=>(100*(self.0%142)+10*(self.1%142)+self.2%142)%142,
            143=>(113*(self.0%143)+16*(self.1%143)+self.2%143)%143,
            144=>(112*(self.0%144)+16*(self.1%144)+self.2%144)%144,
            145=>(141*(self.0%145)+111*(self.1%145)+self.2%145)%145,
            146=>(4*(self.0%146)+2*(self.1%146)+self.2%146)%146,
            147=>(4*(self.0%147)+100*(self.1%147)+self.2%147)%147,
            148=>(144*(self.0%148)+12*(self.1%148)+self.2%148)%148,
            149=>(123*(self.0%149)+102*(self.1%149)+self.2%149)%149,
            150=>(106*(self.0%150)+16*(self.1%150)+self.2%150)%150,
            151=>(105*(self.0%151)+16*(self.1%151)+self.2%151)%151,
            152=>(80*(self.0%152)+112*(self.1%152)+self.2%152)%152,
            153=>(103*(self.0%153)+52*(self.1%153)+self.2%153)%153,
            154=>(102*(self.0%154)+16*(self.1%154)+self.2%154)%154,
            155=>(101*(self.0%155)+16*(self.1%155)+self.2%155)%155,
            156=>(100*(self.0%156)+16*(self.1%156)+self.2%156)%156,
            157=>(39*(self.0%157)+14*(self.1%157)+self.2%157)%157,
            158=>(152*(self.0%158)+130*(self.1%158)+self.2%158)%158,
            159=>(13*(self.0%159)+121*(self.1%159)+self.2%159)%159,
            160=>(96*(self.0%160)+96*(self.1%160)+self.2%160)%160,
            161=>(151*(self.0%161)+121*(self.1%161)+self.2%161)%161,
            162=>(112*(self.0%162)+52*(self.1%162)+self.2%162)%162,
            163=>(152*(self.0%163)+57*(self.1%163)+self.2%163)%163,
            164=>(92*(self.0%164)+16*(self.1%164)+self.2%164)%164,
            165=>(91*(self.0%165)+16*(self.1%165)+self.2%165)%165,
            166=>(134*(self.0%166)+36*(self.1%166)+self.2%166)%166,
            167=>(63*(self.0%167)+49*(self.1%167)+self.2%167)%167,
            168=>(88*(self.0%168)+16*(self.1%168)+self.2%168)%168,
            169=>(48*(self.0%169)+94*(self.1%169)+self.2%169)%169,
            170=>(86*(self.0%170)+86*(self.1%170)+self.2%170)%170,
            171=>(4*(self.0%171)+169*(self.1%171)+self.2%171)%171,
            172=>(4*(self.0%172)+84*(self.1%172)+self.2%172)%172,
            173=>(133*(self.0%173)+47*(self.1%173)+self.2%173)%173,
            174=>(112*(self.0%174)+82*(self.1%174)+self.2%174)%174,
            175=>(81*(self.0%175)+16*(self.1%175)+self.2%175)%175,
            176=>(80*(self.0%176)+16*(self.1%176)+self.2%176)%176,
            177=>(25*(self.0%177)+64*(self.1%177)+self.2%177)%177,
            178=>(128*(self.0%178)+156*(self.1%178)+self.2%178)%178,
            179=>(161*(self.0%179)+124*(self.1%179)+self.2%179)%179,
            180=>(76*(self.0%180)+16*(self.1%180)+self.2%180)%180,
            181=>(126*(self.0%181)+44*(self.1%181)+self.2%181)%181,
            182=>(74*(self.0%182)+16*(self.1%182)+self.2%182)%182,
            183=>(73*(self.0%183)+16*(self.1%183)+self.2%183)%183,
            184=>(128*(self.0%184)+144*(self.1%184)+self.2%184)%184,
            185=>(181*(self.0%185)+86*(self.1%185)+self.2%185)%185,
            186=>(70*(self.0%186)+16*(self.1%186)+self.2%186)%186,
            187=>(69*(self.0%187)+137*(self.1%187)+self.2%187)%187,
            188=>(108*(self.0%188)+72*(self.1%188)+self.2%188)%188,
            189=>(4*(self.0%189)+79*(self.1%189)+self.2%189)%189,
            190=>(156*(self.0%190)+36*(self.1%190)+self.2%190)%190,
            191=>(103*(self.0%191)+26*(self.1%191)+self.2%191)%191,
            192=>(64*(self.0%192)+64*(self.1%192)+self.2%192)%192,
            193=>(108*(self.0%193)+84*(self.1%193)+self.2%193)%193,
            194=>(132*(self.0%194)+158*(self.1%194)+self.2%194)%194,
            195=>(61*(self.0%195)+16*(self.1%195)+self.2%195)%195,
            196=>(4*(self.0%196)+100*(self.1%196)+self.2%196)%196,
            197=>(175*(self.0%197)+61*(self.1%197)+self.2%197)%197,
            198=>(58*(self.0%198)+16*(self.1%198)+self.2%198)%198,
            199=>(155*(self.0%199)+126*(self.1%199)+self.2%199)%199,
            211=>(119*(self.0%211)+69*(self.1%211)+self.2%211)%211,
            223=>(171*(self.0%223)+49*(self.1%223)+self.2%223)%223,
            227=>(147*(self.0%227)+104*(self.1%227)+self.2%227)%227,
            229=>(104*(self.0%229)+44*(self.1%229)+self.2%229)%229,
            233=>(135*(self.0%233)+64*(self.1%233)+self.2%233)%233,
            239=>(34*(self.0%239)+150*(self.1%239)+self.2%239)%239,
            241=>(15*(self.0%241)+225*(self.1%241)+self.2%241)%241,
            243=>(193*(self.0%243)+133*(self.1%243)+self.2%243)%243,
            251=>(243*(self.0%251)+69*(self.1%251)+self.2%251)%251,
            256=>(0*(self.0%256)+0*(self.1%256)+self.2%256)%256,
            257=>(1*(self.0%257)+1*(self.1%257)+self.2%257)%257,
            263=>(33*(self.0%263)+104*(self.1%263)+self.2%263)%263,
            269=>(21*(self.0%269)+57*(self.1%269)+self.2%269)%269,
            271=>(36*(self.0%271)+265*(self.1%271)+self.2%271)%271,
            277=>(155*(self.0%277)+175*(self.1%277)+self.2%277)%277,
            281=>(85*(self.0%281)+101*(self.1%281)+self.2%281)%281,
            283=>(151*(self.0%283)+240*(self.1%283)+self.2%283)%283,
            289=>(35*(self.0%289)+18*(self.1%289)+self.2%289)%289,
            293=>(161*(self.0%293)+109*(self.1%293)+self.2%293)%293,
            307=>(199*(self.0%307)+97*(self.1%307)+self.2%307)%307,
            311=>(35*(self.0%311)+208*(self.1%311)+self.2%311)%311,
            313=>(132*(self.0%313)+142*(self.1%313)+self.2%313)%313,
            317=>(235*(self.0%317)+251*(self.1%317)+self.2%317)%317,
            331=>(256*(self.0%331)+16*(self.1%331)+self.2%331)%331,
            337=>(4*(self.0%337)+2*(self.1%337)+self.2%337)%337,
            343=>(151*(self.0%343)+296*(self.1%343)+self.2%343)%343,
            347=>(129*(self.0%347)+167*(self.1%347)+self.2%347)%347,
            349=>(148*(self.0%349)+219*(self.1%349)+self.2%349)%349,
            353=>(22*(self.0%353)+187*(self.1%353)+self.2%353)%353,
            359=>(264*(self.0%359)+303*(self.1%359)+self.2%359)%359,
            361=>(156*(self.0%361)+321*(self.1%361)+self.2%361)%361,
            367=>(129*(self.0%367)+297*(self.1%367)+self.2%367)%367,
            373=>(68*(self.0%373)+21*(self.1%373)+self.2%373)%373,
            379=>(171*(self.0%379)+277*(self.1%379)+self.2%379)%379,
            383=>(150*(self.0%383)+143*(self.1%383)+self.2%383)%383,
            389=>(164*(self.0%389)+169*(self.1%389)+self.2%389)%389,
            397=>(273*(self.0%397)+99*(self.1%397)+self.2%397)%397,
            401=>(360*(self.0%401)+63*(self.1%401)+self.2%401)%401,
            409=>(265*(self.0%409)+80*(self.1%409)+self.2%409)%409,
            419=>(100*(self.0%419)+409*(self.1%419)+self.2%419)%419,
            421=>(255*(self.0%421)+26*(self.1%421)+self.2%421)%421,
            431=>(216*(self.0%431)+337*(self.1%431)+self.2%431)%431,
            433=>(150*(self.0%433)+296*(self.1%433)+self.2%433)%433,
            439=>(36*(self.0%439)+433*(self.1%439)+self.2%439)%439,
            443=>(153*(self.0%443)+215*(self.1%443)+self.2%443)%443,
            449=>(18*(self.0%449)+359*(self.1%449)+self.2%449)%449,
            457=>(68*(self.0%457)+215*(self.1%457)+self.2%457)%457,
            461=>(444*(self.0%461)+370*(self.1%461)+self.2%461)%461,
            463=>(60*(self.0%463)+261*(self.1%463)+self.2%463)%463,
            467=>(264*(self.0%467)+369*(self.1%467)+self.2%467)%467,
            479=>(28*(self.0%479)+403*(self.1%479)+self.2%479)%479,
            487=>(467*(self.0%487)+286*(self.1%487)+self.2%487)%487,
            491=>(429*(self.0%491)+263*(self.1%491)+self.2%491)%491,
            499=>(462*(self.0%499)+31*(self.1%499)+self.2%499)%499,
            _=>2
      }) as usize
    }
}




main
#!
include!("main.header");
extern crate rayon;
use rayon::prelude::*;
const UPPER:u32=193;
const HALF:u32=(UPPER>>1)+1;
const TO:u32=109;
fn main(){
    let mut lcm=BigUInt(0,0,2);
    for i in 3..HALF{
      lcm=lcm.mul((i/gcd(i,lcm)) as u128)
    }
    let mut x=(vec!,lcm);
    //x=search_roll(x.0,81,x.1);//3
    //x=search_roll(x.0,49,x.1);//7
    x=search_roll(x.0,121,x.1);//11
    x=search_roll(x.0,125,x.1);//2
    x=search_roll(x.0,128,x.1);//5
    x=search_roll(x.0,169,x.1);//13
    //x=search_roll(x.0,243,x.1);//3
    //x=search_roll(x.0,289,x.1);//17
    //x=search_roll(x.0,343,x.1);//7
    for i in HALF..=TO{
      x=search_roll(x.0,i,x.1);
      println!("i={},len={},rep={:?}",i,(x.0).len(),x.1);
      if (x.0).len()>10000000{println!("break at i={},TO={}",i,TO);break}
    }
    let (mut b,lcm)=x;
    b.sort_unstable();
    println!("SHOULD check `TO` and `i` carefully!");
    (0..100).into_par_iter().for_each(|i|{
      search_rayon(&b,193,lcm.mul(i as u128));
    });
}
type BIG=BigUInt;
#
fn gcd(i:u32,j:BIG)->u32{//ensure i<j for better performance
    let (mut i,mut j)=(j.rem(i as u32) as u32,i);
    while i != 0{
      let t=j%i;
      j=i;
      i=t;
    }
    j
}
fn search_roll(b:Vec<BIG>,ix:u32,mut repeats:BIG)->(Vec<BIG>,BIG){
    let i=ix/gcd(ix,repeats);
    let b=if i>1{b.into_iter().map(|x|(0..i).map(|c|x.expand(repeats,c as u128)).filter(|x|ISPRIME).collect::<Vec<_>>()).flatten().collect::<Vec<_>>()}else{b};
    if i>1 {repeats=repeats.mul(i as u128)}
    (b,repeats)
}
fn search_rayon(b:&,mut upper:u32,mp:BIG)->u32{
    let mut c=b.into_iter();
    c.next();
    let mut gg=vec!;
    let mut rem=vec!;
    let mut h=rem.drain(..);
    while let Some(hh)=h.next(){
      gg.push(hh);
      if hh>=upper{break}
    }
    for i in c{
      while gg.iter().copied().all(|t|ISPRIME){
            upper=h.next().unwrap();
            println!("found number= {:?} for n<{}!",i.add(mp),upper);
            gg.push(upper);
      }
    }
    upper
}


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

mathe 发表于 2020-8-9 07:27:55

今天把63以前结果补充一下:
? getlast(1395515070407)
56
? getlast(2345173940567)
58
? getlast(3018245755367)
60
? getlast(7985415341207)
62
页: 1 2 [3]
查看完整版本: 被连续自然数取模后全为质数的最小整数