Код на Си:
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 (атом такой атом).
Забавненько)
ОтветитьУдалить