Pagini recente » Statistici Balmau Dragos (Aluna) | Cod sursa (job #431383) | Monitorul de evaluare | Istoria paginii utilizator/telcontar | Cod sursa (job #971540)
Cod sursa(job #971540)
#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 E[],int prim)
{
for(int p=prim;p<=R;p*=prim)
for(int i=p;i<=R;i+=p)E[i]++;
for(int i=1;i<=R;i++)E[i]+=E[i-1];
}
void Init()
{
f>>R>>D;
if(!(D % 2))CalcExp(Exp2,2);
if(!(D % 3))CalcExp(Exp3,3);
if(!(D % 5))CalcExp(Exp2,5);
}
void SolvePrim(int E[])
{
int i;
for(i=0;i<R-i;i++)
if(E[R]-E[i]-E[R-i])sol+=2;
if(i==R-i && E[R]-E[i]-E[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;
}