Pagini recente » Cod sursa (job #1432783) | Cod sursa (job #1333664) | Cod sursa (job #957064) | Monitorul de evaluare | Cod sursa (job #971546)
Cod sursa(job #971546)
#include <fstream>
#include <algorithm>
#define Nmax 5000010
using namespace std;
ifstream f("pascal.in");
ofstream g("pascal.out");
int R,D,sol,Exp2[Nmax],Exp3[Nmax],Exp5[Nmax];
void CalcExp(int Exp[],int prim)
{
for(int p=prim;p<=R;p*=prim)
for(int i=p;i<=R;i+=p) Exp[i]++;
for(int i=1;i<=R;i++)Exp[i]+=Exp[i-1];
}
void Init()
{
f>>R>>D;
if(!(D % 2))CalcExp(Exp2,2);
if(!(D % 3))CalcExp(Exp3,3);
if(!(D % 5))CalcExp(Exp5,5);
}
void SolvePrim(int Exp[])
{
int i;
for(i=0;i<R-i;i++)
if(Exp[R]-Exp[i]-Exp[R-i])sol+=2;
if(i==R-i && Exp[R]-Exp[i]-Exp[R-i])sol++;
}
void Solve(int D)
{
if(D==2)SolvePrim(Exp2);
if(D==3)SolvePrim(Exp3);
if(D==5)SolvePrim(Exp5);
if(D==4)
{
int i;
for(i=0;i<R-i;i++)
if( (Exp2[R]-Exp2[i]-Exp2[R-i])/2 )sol+=2;
if(i==R-i && (Exp2[R]-Exp2[i]-Exp2[R-i])/2 )sol++;
}
if(D==6)
{
int i;
for(i=0;i<R-i;i++)
if( min((Exp2[R]-Exp2[R]-Exp2[R-i]),(Exp3[R]-Exp3[i]-Exp3[R-i])) )sol+=2;
if(i==R-i && min((Exp2[R]-Exp2[i]-Exp2[R-i]),(Exp3[R]-Exp3[i]-Exp3[R-i])))sol++;
}
}
int main()
{
Init();
Solve(D);
g<<sol<<'\n';
f.close();g.close();
return 0;
}