Cod sursa(job #339282)

Utilizator mlazariLazari Mihai mlazari Data 9 august 2009 11:19:11
Problema Pascal Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#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;
}