Pagini recente » Cod sursa (job #945871) | Cod sursa (job #1101488) | Cod sursa (job #2684165) | Cod sursa (job #107042) | Cod sursa (job #2037164)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("pascal.in");
ofstream g("pascal.out");
int v[4][5000005],p[105];
int r,d,nr,x,rez,last,len;
void umple(int l,int val)
{
x=val; len=v[l][val]=1; p[1]=val;
while(x*val<=r)
{
++len;
v[l][x*val]=len;
x*=val;
p[len]=x;
}
for(int i=1;i<=len;++i)
{
x=2;
while(x*p[i]<=r)
{
v[l][x*p[i]]=max(v[l][p[i]],v[l][x*p[i]]);
++x;
}
}
for(int i=1;i<=r;++i)
{
v[l][i]+=v[l][i-1];
}
}
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)
{
return(v[1][r]>v[1][i]+v[1][r-i]);
}
bool ver2(int i)
{
return (v[1][r]>1+v[1][i]+v[1][r-i]);
}
bool ver3(int i)
{
return(v[1][r]>v[1][i]+v[1][r-i] && v[2][r]>v[2][i]+v[2][r-i]);
}
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;
}