Pagini recente » Cod sursa (job #2117805) | Cod sursa (job #2831530) | Cod sursa (job #2787035) | Cod sursa (job #1439706) | Cod sursa (job #502190)
Cod sursa(job #502190)
#include<stdio.h>
#define NMAX 5000001
int r,d,dd,rd2,i,k,rez,p[NMAX],f[NMAX];
void calcf(int pr) {
int i;
for(i=1;i<pr;i++) f[i]=0;
for(i=pr;i<=r;i++)
if(i%pr) f[i]=0;
else f[i]=1+f[i/pr];
for(i=2;i<=r;i++) f[i]+=f[i-1];
}
int prim(int &d) {
int r;
if((d!=4)&&(d!=6)) {
r=d;
d=1;
}
else {
d/=2;
r=2;
}
return r;
}
int min(int a,int b) {
return a<b?a:b;
}
int main() {
freopen("pascal.in","r",stdin);
freopen("pascal.out","w",stdout);
scanf("%d %d",&r,&d);
rd2=(r+2)/2;
for(i=0;i<rd2;i++) p[i]=2;
dd=d;
while(dd>1) {
calcf(prim(dd));
for(i=0;i<rd2;i++) p[i]=min(p[i],f[r]-f[i]-f[r-i]);
}
if(d==4) k=2;
else k=1;
for(i=0;i<rd2;i++)
if(p[i]>=k) rez++;
rez*=2;
if(!(r%2)&&(p[rd2-1]>=k)) rez-=1;
printf("%d",rez);
return 0;
}