- 注册时间
- 2009-2-12
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 26042
- 在线时间
- 小时
|
发表于 2025-5-19 21:46:27
|
显示全部楼层
C++/GMP计算9位数的超大模, f(987654321,123456789)(mod 10^200+357) ,接近5分钟
- 59323489710030590937498974041811361729503527938950884150633376951881783733141136038416761027788735538124911444839486131816924092080909443328747109357429495905930956053696986596855219597555140472081399
复制代码
计算10位数的超大模,花了40分钟跑完
- ./nm 9876543211 1123456789 mod(10^200+357)
- 14504998039335138058545206947322707754384149282070629521936669837364927124521582648623340291701330931085574869168541809125058605840423114271914268430205327952153272578962424373053385826970817718933164
复制代码
相比之下,PARI/Gp慢了2-3倍,花了一个半小时跑完(1987654321,1234567891) mod(10^200+357)
- 74279609833465405311847193715038711033744229842155861970904036861058714593564477277402764734345492171616002302526713318977511160946438725161458628036851008656618220429643566021101278292868436244638766
复制代码
- HELLO(n,m)=
- {
- local(M,a0,a1,a2,a3,a4,a5,a6,b0,b1,b2,b3,b4,b5,b6,b7,t);
- a0=0;a1=0;a2=(1/48)*(1 - (-1)^n)*(-1 + n)*(1 + n)*(3 + n);
- a3=(1/768)*(1 - (-1)^n)*(-1 + n)*(1 + n)*(3 + n)*(5 + n)^2;
- a4=((1 - (-1)^n)*(-1 + n)*(1 + n)*(3 + n)*(5 + n)^2*(7 + n)^2)/30720;
- a5=((1 - (-1)^n)*(-1 + n)*(1 + n)*(3 + n)*(5 + n)*(7 + n)*(9 + n)*(26355 + n*(12083 + n*(1749 + 85*n))))/185794560;
- a6=(1/7431782400)*(1 - (-1)^n)*(-1 + n)*(1 + n)*(3 + n)*(5 + n)*(7 + n)*(9 + n)*(11 + n)^2*(9345 + n*(4361 + n*(615 + 31*n)));
- t=a6;
- print([n,m,a0,a1,a2,a3,a4,a5,a6]);
- for(k=0, floor((m-1)/2-6),
- b0=-9*(2*k + n)*(1 + 2*k + n)*(2 + 2*k + n)*(3 + 2*k + n)*(5 + 2*k + n)*(7 + 2*k + n)*(9 + 2*k + n)*(11 + 2*k + n);
- b1=3*(2 + 2*k + n)*(3 + 2*k + n)*(5 + 2*k + n)*(7 + 2*k + n)*(9 + 2*k + n)*(11 + 2*k + n)*(252 + 286*k + 92*k^2 + 65*n + 44*k*n + 5*n^2);
- b2=(-(5 + 2*k + n))*(7 + 2*k + n)*(9 + 2*k + n)*(11 + 2*k + n)*(77112 + 138600*k + 95288*k^2 + 29856*k^3 + 3616*k^4 + 32958*n + 44624*k*n + 20880*k^2*n + 3392*k^3*n + 4565*n^2 + 4392*k*n^2 + 1104*k^2*n^2 + 294*n^3 + 152*k*n^3 + 7*n^4);
- b3=(7 + 2*k + n)*(9 + 2*k + n)*(11 + 2*k + n)*(2117304 + 3730728*k + 2661864*k^2 + 962192*k^3 + 176352*k^4 + 13120*k^5 + 620706*n + 894164*k*n + 490952*k^2*n + 121888*k^3*n + 11552*k^4*n + 66973*n^2 + 75846*k*n^2 + 29088*k^2*n^2 + 3776*k^3*n^2 + 3653*n^3 + 2844*k*n^3 + 560*k^2*n^3 + 83*n^4 + 34*k*n^4 + n^5);
- b4=-4*(3 + k)*(7 + 2*k)*(9 + 2*k + n)*(11 + 2*k + n)*(449574 + 526583*k + 234142*k^2 + 46852*k^3 + 3560*k^4 + 95911*n + 87604*k*n + 27192*k^2*n + 2872*k^3*n + 8101*n^2 + 5253*k*n^2 + 870*k^2*n^2 + 329*n^3 + 112*k*n^3 + 5*n^4);
- b5=4*(3 + k)*(4 + k)*(7 + 2*k)*(9 + 2*k)*(11 + 2*k + n)*(147123 + 109870*k + 27540*k^2 + 2312*k^3 + 23087*n + 12252*k*n + 1660*k^2*n + 1437*n^2 + 414*k*n^2 + 33*n^3);
- b6=-64*(3 + k)*(4 + k)*(5 + k)*(7 + 2*k)*(9 + 2*k)*(11 + 2*k)*(1203 + 504*k + 52*k^2 + 136*n + 32*k*n + 5*n^2);
- b7=256*(3 + k)*(4 + k)*(5 + k)*(6 + k)*(7 + 2*k)*(9 + 2*k)*(11 + 2*k)*(13 + 2*k);
- t=b0*a0+b1*a1+b2*a2+b3*a3+b4*a4+b5*a5+b6*a6;
- t=-t/b7;
- a0=a1;a1=a2;a2=a3;a3=a4;a4=a5;a5=a6;
- a6=t;print([k,t])
- );
- }
- WORLD(n,m)=
- {
- my(walltime = getwalltime());
- my(M,a0,a1,a2,a3,a4,a5,a6,b0,b1,b2,b3,b4,b5,b6,b7,t);
- M=1234567891;
- M=10^200+357;
- a0=0;a1=0;a2=Mod((1/48)*(1 - (-1)^n)*(-1 + n)*(1 + n)*(3 + n),M);
- a3=Mod((1/768)*(1 - (-1)^n)*(-1 + n)*(1 + n)*(3 + n)*(5 + n)^2,M);
- a4=Mod(((1 - (-1)^n)*(-1 + n)*(1 + n)*(3 + n)*(5 + n)^2*(7 + n)^2)/30720,M);
- a5=Mod(((1 - (-1)^n)*(-1 + n)*(1 + n)*(3 + n)*(5 + n)*(7 + n)*(9 + n)*(26355 + n*(12083 + n*(1749 + 85*n))))/185794560,M);
- a6=Mod((1/7431782400)*(1 - (-1)^n)*(-1 + n)*(1 + n)*(3 + n)*(5 + n)*(7 + n)*(9 + n)*(11 + n)^2*(9345 + n*(4361 + n*(615 + 31*n))),M);
- t=a6;
- for(k=0, floor((m-1)/2-6),
- b0=Mod(-9*(2*k + n)*(1 + 2*k + n)*(2 + 2*k + n)*(3 + 2*k + n)*(5 + 2*k + n)*(7 + 2*k + n)*(9 + 2*k + n)*(11 + 2*k + n),M);
- b1=Mod(3*(2 + 2*k + n)*(3 + 2*k + n)*(5 + 2*k + n)*(7 + 2*k + n)*(9 + 2*k + n)*(11 + 2*k + n)*(252 + 286*k + 92*k^2 + 65*n + 44*k*n + 5*n^2),M);
- b2=Mod((-(5 + 2*k + n))*(7 + 2*k + n)*(9 + 2*k + n)*(11 + 2*k + n)*(77112 + 138600*k + 95288*k^2 + 29856*k^3 + 3616*k^4 + 32958*n + 44624*k*n + 20880*k^2*n + 3392*k^3*n + 4565*n^2 + 4392*k*n^2 + 1104*k^2*n^2 + 294*n^3 + 152*k*n^3 + 7*n^4),M);
- b3=Mod((7 + 2*k + n)*(9 + 2*k + n)*(11 + 2*k + n)*(2117304 + 3730728*k + 2661864*k^2 + 962192*k^3 + 176352*k^4 + 13120*k^5 + 620706*n + 894164*k*n + 490952*k^2*n + 121888*k^3*n + 11552*k^4*n + 66973*n^2 + 75846*k*n^2 + 29088*k^2*n^2 + 3776*k^3*n^2 + 3653*n^3 + 2844*k*n^3 + 560*k^2*n^3 + 83*n^4 + 34*k*n^4 + n^5),M );
- b4=Mod(-4*(3 + k)*(7 + 2*k)*(9 + 2*k + n)*(11 + 2*k + n)*(449574 + 526583*k + 234142*k^2 + 46852*k^3 + 3560*k^4 + 95911*n + 87604*k*n + 27192*k^2*n + 2872*k^3*n + 8101*n^2 + 5253*k*n^2 + 870*k^2*n^2 + 329*n^3 + 112*k*n^3 + 5*n^4), M);
- b5=Mod(4*(3 + k)*(4 + k)*(7 + 2*k)*(9 + 2*k)*(11 + 2*k + n)*(147123 + 109870*k + 27540*k^2 + 2312*k^3 + 23087*n + 12252*k*n + 1660*k^2*n + 1437*n^2 + 414*k*n^2 + 33*n^3),M);
- b6=Mod(-64*(3 + k)*(4 + k)*(5 + k)*(7 + 2*k)*(9 + 2*k)*(11 + 2*k)*(1203 + 504*k + 52*k^2 + 136*n + 32*k*n + 5*n^2),M);
- b7=Mod(256*(3 + k)*(4 + k)*(5 + k)*(6 + k)*(7 + 2*k)*(9 + 2*k)*(11 + 2*k)*(13 + 2*k),M);
- t=b0*a0+b1*a1+b2*a2+b3*a3+b4*a4+b5*a5+b6*a6;
- t=-t/b7;
- a0=a1;a1=a2;a2=a3;a3=a4;a4=a5;a5=a6;
- a6=t;
- if(k%1000000==0,printf("k=%d, time took %s\n",k,strtime(getwalltime() - walltime)))
- );
- component(t,2)
- }
复制代码 |
|