Pagini recente » Borderou de evaluare (job #118889) | Cod sursa (job #3204214) | Cod sursa (job #1963325) | Cod sursa (job #2020893) | Cod sursa (job #764416)
Cod sursa(job #764416)
#include<stdio.h>
FILE *f = fopen("pascal.in","r");
FILE *g = fopen("pascal.out","w");
#define MaxD 10
int D,R,Ci,Cf,Sol;
int A[MaxD];
void citire(void)
{
fscanf(f,"%d %d",&R,&D);
}
inline void AdunaSauScade(int a,int operatie)
{
if(operatie)
{
for(;a%2 == 0;A[2] ++,a /= 2);
for(;a%3 == 0;A[3] ++,a /= 3);
for(;a%5 == 0;A[5] ++,a /= 5);
}
else
{
for(;a%2 == 0;A[2] --,a /= 2);
for(;a%3 == 0;A[3] --,a /= 3);
for(;a%5 == 0;A[5] --,a /= 5);
}
}
inline int Divizibil(int D)
{
if(D == 2 && A[2])
return 1;
if(D == 3 && A[3])
return 1;
if(D == 4 && A[2] >= 2)
return 1;
if(D == 5 && A[5])
return 1;
if(D == 6 && A[2] && A[3])
return 1;
return 0;
}
void Rezolvare(void)
{
Ci = R,Cf = 1;
-- R;
for(int i=1;i<=R/2;i++)
{
AdunaSauScade(Ci--,1);
AdunaSauScade(Cf++,0);
Sol += Divizibil(D);
}
Sol *= 2;
if(R&1)
{
AdunaSauScade(Ci--,1);
AdunaSauScade(Cf++,0);
Sol += Divizibil(D);
}
}
int main()
{
citire();
Rezolvare();
fprintf(g,"%d\n",Sol);
}