Cod sursa(job #31662)

Utilizator razvi9Jurca Razvan razvi9 Data 16 martie 2007 13:33:32
Problema Factorial Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.72 kb
#include<stdio.h>
long nr,p;
long nz(long p)
{long nr=0;
 while(p%5==0) {nr++;  p=p/5;}
 return nr;}
long nrzero(long n,long nri,long p)
{long nr=nri;
 for(long i=p-p%5+5;i<=n;i=i+5)
  nr=nr+1+nz(i/5);
 return nr;}
long div(long inc,long sf,long nr)
{long m=(inc+sf)/2,nz;
 nz=nrzero(m,nr,inc);
 if(nz==p) return m;
 if(nz<p) return div(m,sf,nz);
 return div(inc,m,nr);
}
int main()
{freopen("fact.in","r",stdin);
 scanf("%ld",&p);
 fclose(stdin);
 if(p==0) nr=1;else
 if(p<1000) nr=div(1,4005,0);else
 if(p==1000) nr=4005;else
 if(p>1000&&p<10000) nr=div(4005,40010,1000);else
 if(p==10000) nr=40010;else
 if(p>10000&&p<100000) nr=div(40010,400005,10000);else
 if(p==100000) nr=400005;else
 if(p>100000&&p<1000000)nr=div(400005,4000005,100000);else
 if(p==1000000) nr=4000005;else
 if(p>1000000&&p<5000000) nr=div(4000005,20000005,1000000);else
 if(p==5000000) nr=20000005;else
 if(p>5000000&&p<10000000) nr=div(20000005,40000010,5000000);else
 if(p==10000000) nr=40000010;else
 if(p>10000000&&p<12500000) nr=div(40000010,50000005,10000000);else
 if(p==12500000) nr=50000005;else
 if(p>12500000&&p<15000000) nr=div(50000005,60000010,12500000);else
 if(p==15000000) nr=60000010;else
 if(p>15000000&&p<17500000) nr=div(60000010,70000010,15000000);else
 if(p==17500000) nr=70000010;else
 if(p>17500000&&p<20000000) nr=div(70000010,80000015,17500000);else
 if(p==20000000) nr=80000015;else
 if(p>20000000&&p<22500000) nr=div(80000015,90000010,20000000);else
 if(p==22500000) nr=90000010;else
 if(p>22500000&&p<25000000) nr=div(90000010,100000005,22500000);else
 if(p==25000000) nr=100000005;else
 if(p>25000000&&p<27500000) nr=div(100000005,110000010,25000000);else
 if(p==27500000) nr=110000010;else
 if(p>27500000&&p<28750000) nr=div(110000010,115000015,27500000);else
 if(p==28750000) nr=115000015;else
 if(p>28750000&&p<30000000) nr=div(115000015,120000010,28750000);else
 if(p==30000000) nr=120000010;else
 if(p>30000000&&p<32500000) nr=div(120000010,130000015,30000000);else
 if(p==32500000) nr=130000015;else
 if(p>32500000&&p<35000000) nr=div(130000015,140000015,32500000);else
 if(p==35000000) nr=140000015;else
 if(p>35000000&&p<37500000) nr=div(140000015,150000010,35000000);else
 if(p==37500000) nr=150000010;else
 if(p>37500000&&p<40000000) nr=div(150000010,160000015,37500000);else
 if(p==40000000) nr=160000015;else

 if(p>40000000&&p<45000000) nr=div(160000015,180000015,40000000);else
 if(p==45000000) nr=180000015;else

 if(p>45000000&&p<50000000) nr=div(180000015,200000010,45000000);else
 if(p==50000000) nr=200000010;else

 if(p>50000000&&p<55000000) nr=div(200000010,220000015,50000000);else
 if(p==55000000) nr=220000015;else

 if(p>55000000&&p<60000000) nr=div(220000015,240000020,55000000);else
 if(p==60000000) nr=240000020;else

 if(p>60000000&&p<65000000) nr=div(240000020,260000010,60000000);else
 if(p==65000000) nr=260000010;else

 if(p>65000000&&p<70000000) nr=div(260000010,280000015,65000000);else
 if(p==70000000) nr=280000015;else

 if(p>70000000&&p<75000000) nr=div(280000015,300000010,70000000);else
 if(p==80000000) nr=300000010;else

 if(p>75000000&&p<80000000) nr=div(300000010,320000015,75000000);else
 if(p==80000000) nr=320000015;else

 if(p>80000000&&p<85000000) nr=div(320000015,340000015,80000000);else
 if(p==85000000) nr=340000015;else

 if(p>85000000&&p<90000000) nr=div(340000015,360000015,85000000);else
 if(p==90000000) nr=360000015;else

 if(p>90000000&&p<95000000) nr=div(360000015,380000020,90000000);else
 if(p==95000000) nr=380000020;else

 if(p>95000000&&p<100000000) nr=div(380000020,400000015,95000000);else
 if(p==100000000) nr=400000015;
 while(nr!=1&&nr%5) nr--;
 freopen("fact.out","w",stdout);
 printf("%ld",nr);
 fclose(stdout);
 return 0;}