Pagini recente » Istoria paginii runda/concurs_11_12_02_27/clasament | Cod sursa (job #904291) | Cod sursa (job #1701555) | Istoria paginii schimbare-borland/ghid/instalare | Cod sursa (job #504171)
Cod sursa(job #504171)
#include <fstream>
using namespace std;
const char InFile[]="pascal.in";
const char OutFile[]="pascal.out";
const int MaxR=5000111;
ifstream fin(InFile);
ofstream fout(OutFile);
int n,d,p2,p3,p5,r2,r3,r5,sol,tr2,tr3,tr5,legendre2[MaxR],legendre3[MaxR],legendre5[MaxR];
inline int desc(int x,int p)
{
int sol(0);
while(x%p==0)
{
x/=p;
++sol;
}
return sol;
}
int main()
{
fin>>n>>d;
fin.close();
while(d%2==0)
{
++r2;
d/=2;
}
while(d%3==0)
{
++r3;
d/=3;
}
while(d%5==0)
{
++r5;
d/=5;
}
for(register int i=2;i<=n;++i)
{
legendre2[i]=legendre2[i-1]+desc(i,2);
legendre3[i]=legendre3[i-1]+desc(i,3);
legendre5[i]=legendre5[i-1]+desc(i,5);
}
tr2=legendre2[n];
tr3=legendre3[n];
tr5=legendre5[n];
for(register int j=1;j<(n+1)>>1;++j)
{
p2=tr2-legendre2[j]-legendre2[n-j];
p3=tr3-legendre3[j]-legendre3[n-j];
p5=tr5-legendre5[j]-legendre5[n-j];
if(p2>=r2 && p3>=r3 && p5>=r5)
{
sol+=2;
}
}
if((n-1)%2==1)
{
int j=((n+1)>>1)+1;
p2=tr2-legendre2[j]-legendre2[n-j];
p3=tr3-legendre3[j]-legendre3[n-j];
p5=tr5-legendre5[j]-legendre5[n-j];
if(p2>=r2 && p3>=r3 && p5>=r5)
{
++sol;
}
}
fout<<sol;
fout.close();
return 0;
}