private void TSL2(int i,int G1){
if (i==3){ //以下就是数列求和了
int yn;
int a1,a2,an,an1;
int g;
int temp1;
g=G1-tm[3];
yn=g/5+1; //数列项数
a1=g/2+1; //第一项
a2=(g-5)/2+1;//第二项
an=(g-(yn-1)*5)/2+1;//第n项
an1=(g-(yn-2)*5)/2+1;//第n-1项
if((yn%2)==0){//为偶数时
if(yn==2){
n +=(a1+an);
}
else{
temp1=((a1+an)*(yn/2))/2+((a2+an1)*(yn/2))/2;
n +=temp1;
}
}
else{ //为奇数时
if(yn==1){n +=a1;}
else{
temp1=((a1+an)*((yn+1)/2)/2)+((a2+an1)*((yn-1)/2)/2);
n +=temp1;
}
}
}
else{
for (r[i-1]=0;r[i-1]<((G1-tm[i])/MZ[i]+1);r[i-1]++){
tm[i-1]=tm[i]+r[i-1]*MZ[i];
TSL2(i-1,G1);
}
}
}
//Sat Dec 30 13:57:42 CST 2017
//10000分总的组合数(递归算法二阶加速)=7089628318292844
//Sat Dec 30 15:10:29 CST 2017
//还有更快的算法吗?或能否验证结果的对错。
算法是可行的,关键是能不能在短时间得出结果。
Tue Jan 02 14:36:12 CST 2018
10000分总的组合数(递归算法二阶加速)=7089628318292844
Tue Jan 02 15:53:22 CST 2018
加速后,还要一个多小时,不加速要上千个小时了。