Pagini recente » Cod sursa (job #2560864) | Cod sursa (job #192587) | Cod sursa (job #2448089) | Cod sursa (job #2158085) | Cod sursa (job #2090932)
#include <fstream>
using namespace std;
ifstream in("pascal.in");
ofstream out("pascal.out");
int v2[5000001],v3[5000001],v5[5000001],expn2[5000001],expn3[5000001],expn5[5000001];
void expn(int n,int p,int v[])
{
int ci=n,exp=0,i;
for(i=1; i<=n; i++)
{
exp=0;
ci=i;
while(ci%p==0)
exp++,ci/=p;
v[i]=exp;
}
}
void legendre(int n,int p,int v[],int exp[])
{
int i,ci;
v[0]=0;
for(i=1; i<=n; i++)
{
ci=i;
v[i]=v[i-1]+exp[i];
}
}
int main()
{
int r,d,i,j,cnt=0,ok=0;
in>>r>>d;
if(d==2||d==4||d==6)
{
expn(r,2,expn2);
legendre(r,2,v2,expn2);
}
if(d==3||d==6)
{
expn(r,3,expn3);
legendre(r,3,v3,expn3);
}
if(d==5)
{
expn(r,5,expn5);
legendre(r,5,v5,expn5);
}
for(i=0; i<(r+1)/2; i++)
{
if(d==2)
if(v2[r]-v2[r-i]-v2[i])
ok++;
if(d==3)
if(v3[r]-v3[r-i]-v3[i])
ok++;
if(d==4)
if(v2[r]-v2[r-i]-v2[i]>1)
ok++;
if(d==5)
if(v5[r]-v5[r-i]-v5[i])
ok++;
if(d==6)
if(v2[r]-v2[r-i]-v2[i] && v3[r]-v3[r-i]-v3[i])
ok++;
}
if(r%2==0)
{
i=r/2;
if(d==2)
if(v2[r]-v2[r-i]-v2[i])
cnt++;
if(d==3)
if(v3[r]-v3[r-i]-v3[i])
cnt++;
if(d==4)
if(v2[r]-v2[r-i]-v2[i]>1)
cnt++;
if(d==5)
if(v5[r]-v5[r-i]-v5[i])
cnt++;
if(d==6)
if(v2[r]-v2[r-i]-v2[i] && v3[r]-v3[r-i]-v3[i])
cnt++;
}
out<<ok*2+cnt;
return 0;
}