Pagini recente » Cod sursa (job #1890464) | Cod sursa (job #2593018) | Cod sursa (job #848907) | Cod sursa (job #986916) | Cod sursa (job #1525248)
#include <fstream>
using namespace std;
ifstream f("pascal.in");
ofstream g("pascal.out");
long n,d,r,i,j,sol,m, v[5000002],v1[5000002],p2,p3,x2,x3,r1,m1;
long zax(long q , long e)
{
r=n%q;
x2=0;
m=n-r;
while(m%q==0){x2++;m=m/q;}
sol=0;
v[0]=0;
p2=0;
j=(n-1)/2;
for(i=1;i<=j;i++)
{
if(i%q==0)v[i]=v[i/q]+1;
else v[i]=0;
if(i-1-r==0)p2=x2;
else
if(x2>v[i-1-r])p2=p2+v[i-1-r]-v[i];
else p2=p2+x2-v[i];
if(p2>e)sol++;
}
if((n-1)%2==0)sol=sol*2;
else {
sol=sol*2;
if(i%q==0)v[i]=v[i/q]+1;
else v[i]=0;
if(i-1-r==0)p2=x2;
else
if(x2>v[i-1-r])p2=p2+v[i-1-r]-v[i];
else p2=p2+x2-v[i];
if(p2>e)sol++;
}
return sol;
}
long zass()
{
r=n%2;r1=n%3;
x2=0;x3=0;
m=n-r;
m1=n-r1;
while(m%2==0){x2++;m=m/2;}
while(m1%2==0){x3++;m1=m1/3;}
sol=0;
v[0]=0;
v1[0]=0;
p2=0;p3=0;
j=(n-1)/2;
for(i=1;i<=j;i++)
{
if(i%2==0)v[i]=v[i/2]+1;
else v[i]=0;
if(i-1-r==0)p2=x2;
else
if(x2>v[i-1-r])p2=p2+v[i-1-r]-v[i];
else p2=p2+x2-v[i];
if(i%3==0)v1[i]=v1[i/3]+1;
if(i-1-r1==0)p3=x3;
else
if(x3>v[i-1-r1])p3=p3+v1[i-1-r1]-v1[i];
else p3=p3+x3-v1[i];
if((p2>0)&&(p3>0))sol++;
}
if((n-1)%2==0)sol=sol*2;
else { sol=sol*2;
if(i%2==0)v[i]=v[i/2]+1;
else v[i]=0;
if(i-1-r==0)p2=x2;
else
if(x2>v[i-1-r])p2=p2+v[i-1-r]-v[i];
else p2=p2+x2-v[i];
if(i%3==0)v1[i]=v1[i/3]+1;
if(i-1-r1==0)p3=x3;
else
if(x3>v[i-1-r1])p3=p3+v1[i-1-r1]-v1[i];
else p3=p3+x3-v1[i];
if((p2>0)&&(p3>0))sol++;
}
return sol;
}
int main()
{
f>>n>>d;
switch (d){
case 2:
g<<zax(2,0);
break;
case 3:
g<<zax(3,0);
break;
case 4:
g<<zax(2,1);
break;
case 5:
g<<zax(5,0);
break;
case 6:
g<<zass();
break;
}
return 0;
}