Pagini recente » Cod sursa (job #2071881) | Cod sursa (job #2854972) | Cod sursa (job #2644077) | Cod sursa (job #1626103) | Cod sursa (job #10758)
Cod sursa(job #10758)
#include <stdio.h>
#define infile "pascal.in"
#define outfile "pascal.out"
#define NMAX 5000005
FILE *fin,*fout;
int r,d;
int ind,factor[2][2];
int a[NMAX][2];
void desc()
{
switch(d)
{
case 2: ind=1;
factor[0][0]=2;
factor[0][1]=1;
break;
case 3: ind=1;
factor[0][0]=3;
factor[0][1]=1;
break;
case 4: ind=1;
factor[0][0]=2;
factor[0][1]=2;
break;
case 5: ind=1;
factor[0][0]=5;
factor[0][1]=1;
break;
case 6: ind=2;
factor[0][0]=2;
factor[0][1]=1;
factor[1][0]=3;
factor[1][1]=1;
break;
}
}
inline int nr_apar(int n, int div)
{
if(n>1 && n%div==0)
return nr_apar(n/div,div)+1;
return 0;
}
int main()
{
int i,j,count=0,ok;
fin=fopen(infile,"r");
fscanf(fin,"%d %d",&r,&d);
fclose(fin);
desc();
for(j=0;j<ind;j++)
{
a[0][j]=0;
for(i=1;i<=r/2;i++)
a[i][j] = a[i-1][j] + nr_apar(r-i+1,factor[j][0]) - nr_apar(i,factor[j][0]);
}
for(i=0;i<=r/2;i++)
{
ok=1;
for(j=0;j<ind;j++)
if(a[i][j] < factor[j][1])
ok=0;
count+=ok;
}
count<<=1;
if(r%2==0)
{
ok=1;
i=r/2;
for(j=0;j<ind;j++)
if(a[i][j] < factor[j][1])
ok=0;
count-=ok;
}
fout=fopen(outfile,"w");
fprintf(fout,"%d\n",count);
fclose(fout);
return 0;
}