Pagini recente » Cod sursa (job #1527425) | Cod sursa (job #1191385) | Cod sursa (job #2684162) | Cod sursa (job #2085011) | Cod sursa (job #2037154)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("pascal.in");
ofstream g("pascal.out");
int v[4][5000005];
int r,d,nr,x,rez,last,a,b,c,a1,b1,c1;
void umple(int l,int val)
{
for(int i=val;i<=r;i+=val)
{
x=i; nr=0;
while(x%val==0)
{
++nr;
x/=val;
}
v[l][i]=nr+v[l][i-val];
}
}
void factoriale()
{
x=d;
if(d==4) x/=2;
if(d==6) x/=3;
umple(1,x);
if(d==6) umple(2,3);
}
bool ver1(int i)
{
a=(r/d)*d;
b=(i/d)*d;
c=((r-i)/d)*d;
return(v[1][a]>v[1][b]+v[1][c]);
}
bool ver2(int i)
{
a=(r/2)*2;
b=(i/2)*2;
c=((r-i)/2)*2;
return (v[1][a]>1+v[1][b]+v[1][c]);
}
bool ver3(int i)
{
a=(r/2)*2;
b=(i/2)*2;
c=((r-i)/2)*2;
a1=(r/3)*3;
b1=(i/3)*3;
c1=((r-i)/3)*3;
return(v[1][a]>v[1][b]+v[1][c] && v[2][a1]>v[2][b1]+v[2][c1]);
}
bool cond(int i)
{
if(d==2 || d==3 || d==5) return ver1(i);
if(d==4) return ver2(i);
else return ver3(i);
}
int main()
{
f>>r>>d;
factoriale();
for(int i=0;i<=r/2;++i)
{
last=rez;
if(cond(i))
{
++rez;
}
}
if(r%2==0) rez+=last;
else rez+=rez;
g<<rez;
return 0;
}