Pagini recente » Istoria paginii runda/itmarathon | Cod sursa (job #1738144) | Cod sursa (job #720366) | Cod sursa (job #1006445) | Cod sursa (job #350543)
Cod sursa(job #350543)
#include <stdio.h>
int r,d,sol;
int min(int a, int b) {
return a<b?a:b;
}
void solve(int d) {
int es,ej,e,p,k;
es = 0;
for (p=d; p<=r; p*=d)
es += r/p;
for (k=1; k<=(r-1)/2; k++) {
ej = 0;
for (p=d; p<=k; p*=d)
ej += k/p;
for (p=d; p<=r-k; p*=d)
ej += (r-k)/p;
e = es - ej;
if (e)
sol++;
}
sol *= 2;
if (r%2==0) {
k = r/2;
ej = 0;
for (p=d; p<=k; p*=d)
ej += k/p;
for (p=d; p<=r-k; p*=d)
ej += (r-k)/p;
e = es - ej;
if (e)
sol++;
}
}
void solve4() {
int es,ej,e,p,k;
es = 0;
d /= 2;
for (p=d; p<=r; p*=d)
es += r/p;
for (k=1; k<=(r-1)/2; k++) {
ej = 0;
for (p=d; p<=k; p*=d)
ej += k/p;
for (p=d; p<=r-k; p*=d)
ej += (r-k)/p;
e = es - ej;
if (e>=2)
sol++;
}
sol *= 2;
if (r%2==0) {
k = r/2;
ej = 0;
for (p=d; p<=k; p*=d)
ej += k/p;
for (p=d; p<=r-k; p*=d)
ej += (r-k)/p;
e = es - ej;
if (e>=2)
sol++;
}
}
void solve6() {
int es2,es3,ej2,ej3,e2,e3,p,k;
es2 = es3 = 0;
d = 2;
for (p=d; p<=r; p*=d)
es2 += r/p;
d = 3;
for (p=d; p<=r; p*=d)
es3 += r/p;
for (k=1; k<=(r-1)/2; k++) {
d = 2;
ej2 = 0;
for (p=d; p<=k; p*=d)
ej2 += k/p;
for (p=d; p<=r-k; p*=d)
ej2 += (r-k)/p;
e2 = es2 - ej2;
d = 3;
ej3 = 0;
for (p=d; p<=k; p*=d)
ej3 += k/p;
for (p=d; p<=r-k; p*=d)
ej3 += (r-k)/p;
e3 = es3 - ej3;
if (min(e2,e3))
sol++;
}
sol *= 2;
if (r%2==0) {
k = r/2;
d = 2;
ej2 = 0;
for (p=d; p<=k; p*=d)
ej2 += k/p;
for (p=d; p<=r-k; p*=d)
ej2 += (r-k)/p;
e2 = es2 - ej2;
d = 3;
ej3 = 0;
for (p=d; p<=k; p*=d)
ej3 += k/p;
for (p=d; p<=r-k; p*=d)
ej3 += (r-k)/p;
e3 = es3 - ej3;
if (min(e2,e3))
sol++;
}
}
int main() {
FILE *f = fopen("pascal.in","r");
FILE *g = fopen("pascal.out","w");
fscanf(f,"%d%d",&r,&d);
if (d==4)
solve4();
else
if (d==6)
solve6();
else
solve(d);
fprintf(g,"%d",sol);
fclose(f);
fclose(g);
return 0;
}