Pagini recente » Cod sursa (job #2800981) | Cod sursa (job #1545041) | Cod sursa (job #3291025) | Cod sursa (job #616512) | Cod sursa (job #19058)
Cod sursa(job #19058)
#include <fstream>
#define N 2500001
using namespace std;
int V[N], V2[N];
int r, d;
int S;
ofstream fout("pascal.out");
void showV(void)
{int i;
for(i=1;i<=r/2;i++)
fout<<V[i]<<" ";
fout<<'\n';
}
int nrdiv(int n)
{int s=0;
while(n%d==0)
{n/=d;
s++;
}
return s;
}
void completeV(void)
{int i; if(r==0) {V[1]=0; return;}
V[1]=nrdiv(r);
for(i=2;i<=r/2;i++)
V[i]=V[i-1]+nrdiv(r-i+1)-nrdiv(i);
}
void completeV2(void)
{int i; if(r==0) {V2[1]=0; return;}
V2[1]=nrdiv(r);
for(i=2;i<=r/2;i++)
V2[i]=V2[i-1]+nrdiv(r-i+1)-nrdiv(i);
}
int main(void)
{ifstream fin("pascal.in");
int i;
fin>>r>>d;
fin.close();
if(d!=4){
if(d!=6) {
completeV();
for(i=1;i<=(r-1)/2;i++)
if(V[i]>0) S++;
S*=2;
if(r%2==0) S+=(V[r/2]>0);
}
else{d=2;
completeV();
d=3;
completeV2();
for(i=1;i<=(r-1)/2;i++)
if(V[i]>0 && V2[i]>0) S++;
S*=2;
if(r%2==0) S+=(V[r/2]>0 && V2[r/2]>0);
}
}
else {d=2;
completeV();
for(i=1;i<=(r-1)/2;i++)
if(V[i]>1) S++;
S*=2;
if(r%2==0) S+=(V[r/2]>1);
}
fout<<S<<'\n';
fout.close();
return 0;
}