Здравствуйте.
Есть программа, написанная Диком Т. Винтером (Dik T. Winter at CWI) на Си всего 160-ю символами, но вычисляющая 800 знаков Пи, вот оригинал ее текста:
Код:
int a=10000,b,c=2800,d,e,f[2801],g;main(){for(;b-c;)f[b++]=a/5; for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)for(b=c;d+=f[b]*a, f[b]=d%--g,d/=g--,--b;d*=b);}
в таком виде мало что понятно, я переписал в более доступной форме:
Код:
int a = 10000;
int b = 0;
int c = 2800;
int d = 0;
int e = 0;
int f[2801];
int g = 0;
int main()
{
//заполняет массив значением à/5 = 2000
for (b = 0; b < c; b++) f[b] = a/5;
   //цикл вычислений
   while (g = c * 2)
     {
     d = 0;
     for (b = c; b > 1; b--)
       {
       d += f[b] * a;
       --g; f[b] = d % g;
       d /= g; g--;
       d *= b;
       }
    
     //выводит на экран по 4 цифры, например: 3141
     printf("%.4d", e + d/a);
     c -= 14;
     e = d % a;
     }
getch();
return 0;
} 
Программа работает и за время менее секунды вычисляет все свои положенные 800 знаков:

Если кто может, объясните, на чем основан принцип действия данного алгоритма, какой у него физический смысл - почему он вообще вычисляет Пи, почему именно 800 знаков, а не 1000 например и т.д.