Pagini recente » Cod sursa (job #337126) | Cod sursa (job #333601) | Cod sursa (job #2893033) | Cod sursa (job #3295563) | Cod sursa (job #343651)
Cod sursa(job #343651)
#include <cstdio>
using namespace std;
int const maxr = 5000000;
int F[1+maxr];
int C[1+maxr];
void count (int p, int n) {
C[1]=0; int s; for ( s=2; n>=s; ++s ) {
if ( 0 == (s%p) ) { C[s]=1+C[s/p]; } else { C[s]=0; }
}
}
void filter(int dt, int n) {
int fn=0, s;
for ( s=1; n>=s; ++s ) {
fn += C[(n-s+1)];
fn -= C[s];
if (fn < dt) { F[s]=0; }
}
}
void prune (int d, int n) {
if (2 == d) { count(2,n); filter(1,n); return; }
if (3 == d) { count(3,n); filter(1,n); return; }
if (4 == d) { count(2,n); filter(2,n); return; }
if (5 == d) { count(5,n); filter(1,n); return; }
if (6 == d) { count(2,n); filter(1,n);
count(3,n); filter(1,n); return; }
}
int
main ( ) {
FILE * fl = fopen("pascal.in", "r");
int R,D,s,a=0; fscanf(fl,"%d %d",&R,&D);
fclose(fl);
F[0]=0; for ( s=1; R>=s; ++s ) { F[s]=1; }
prune(D,R);
for ( s=0; R>=s; ++s ) {
if ( 0 != F[s] ) { ++ a; }
}
fl=fopen("pascal.out", "w");
fprintf(fl, "%d\n", a);
fclose(fl);
return 0;
}