19 мая 2011 г.

Вычисление самого большого известного простого числа

Гениальный человек по имени Фабрис Беллар написал программу с исходным кодом в 438 байт, которая вычисляет самое большое, известное человечеству, простое число.
Код на Си:

int m=167772161,N=1,t[1<<25]={2},a,*p,i,e=34893349,s,c,U=1;g(d,h){for(i=s;i<1<<
24;i*=2)d=d*1LL*d%m;for(p=t;p<t+N;p+=s)for(i=s,c=1;i;i--)a=p[s]*(h?c:1LL)%m,p[s]
=(m+*p-a)*(h?1LL:c)%m,a+=*p,*p++=a%m,c=c*1LL*d%m;}main(){while(e/=2){N*=2;U=U*
1LL*(m+1)/2%m;for(s=N;s/=2;)g(17,0);for(p=t;p<t+N;p++)*p=*p*1LL**p%m*U%m;for(s=1
;s<N;s*=2)g(29606852,1);for(a=0,p=t;p<t+N;)a+=*p<<(e&1),*p++=a%10,a/=10;}while(!
*--p);for(t[0]--;p>=t;)putchar(48+*p--);}

Создаём файлик test.c с этим содержимым, компилируем и запускаем:

$ gcc test.c && ./a.out

У меня только компилировалось это чудо с пол минуты, а вычисления производились минут 5 (атом такой атом).

1 комментарий: