fork download
  1. #include<stdio.h>
  2. typedef long long int LI;
  3. #define c11 25
  4. #define c23 30
  5. #define b11 ((1<<c11)-1)
  6. #define b23 ((1<<c23)-1)
  7. #define mv(a,b) (a[0]=b[0],a[1]=b[1],a[2]=b[2])
  8. void i2b(int*a){int i,b[3]; LI c,n=10LL; char*p,q[33]={'0'};
  9. mv(b,a);
  10. for(p=q;0<b[0]+b[1]+b[2]&&p-q<30;*p++='0'+(char)c)
  11. for(c=0LL,i=0; i<3; ++i)
  12. c<<=c23, c+=b[i], b[i]=c/n, c%=n;
  13. for(p-=q<p;q<=p;putchar(*p--));
  14. }
  15. int add(int*c,int*a,int*b){int z;
  16. *c=c[1]=c[2]=z=0;
  17. z+=a[2]+b[2]; c[2]=z&b23; z>>=c23;
  18. z+=a[1]+b[1]; c[1]=z&b23; z>>=c23;
  19. z+=a[0]+b[0]; c[0]=z&b11;
  20. return z;
  21. }
  22. int mul(int*c,int*a,int*b){ LI z=0LL;
  23. *c=c[1]=c[2]=0;
  24. z+=(LI)a[2]*(LI)b[2];
  25. c[2]=(int)(z&(LI)b23); z>>=(LI)c23;
  26. z+=(LI)a[1]*(LI)b[2]+(LI)a[2]*(LI)b[1];
  27. c[1]=(int)(z&(LI)b23); z>>=(LI)c23;
  28. z+=(LI)a[0]*(LI)b[2]+(LI)a[1]*(LI)b[1]+(LI)a[2]*(LI)b[0];
  29. c[0]=(int)(z&(LI)b11);
  30. return z;
  31. }
  32. int main(void){LI i;
  33. int b[3]={0,0, 2};
  34. int a[3]={0,0,27};
  35. int s[3]={0,0,27};
  36. int t[3];
  37. for (i = 1LL; i < 1099511627776LL/30000LL ; i++){
  38. mul(t,a,a); mul(b,t,a); add(t,s,b);
  39. mv(a,b); mv(s,t);
  40. //printf("%d:",i); i2b(s); printf("/"); i2b(a); puts("");
  41. }
  42. i2b(s); puts("");
  43. return 0;
  44. }
Success #stdin #stdout 0.36s 9424KB
stdin
Standard input is empty
stdout
17396612018432151008312873