Pagini recente » Cod sursa (job #356910) | Cod sursa (job #229026) | Cod sursa (job #3224304) | Cod sursa (job #110916) | Cod sursa (job #2320196)
#include <fstream>
using namespace std;
ifstream cin ("pascal.in");
ofstream cout ("pascal.out");
long long mod;
long long d[6];
int ciur2[5000003];
int ciur3[5000003];
int ciur5[5000003];
void upd (long long val)
{
d[2]+=ciur2[val];
d[3]+=ciur3[val];
d[5]+=ciur5[val];
}
void sct (long long val)
{
while(!(val&1LL))
{
val>>=1LL;
--d[2];
}
while(!(val%3))
{
val/=3;
--d[3];
}
while(!(val%5))
{
val/=5;
--d[5];
}
d[2]-=ciur2[val];
d[3]-=ciur3[val];
d[5]-=ciur5[val];
}
int main()
{
long long r,i,cur=0,cnt=0,inmul,imp=2;
cin>>r>>mod;
inmul=r-1;
for(i=2;i<=r;i+=2)
ciur2[i]=1+ciur2[i/2];
for(i=3;i<=r;i+=3)
ciur3[i]=1+ciur3[i/3];
for(i=5;i<=r;i+=5)
ciur5[i]=1+ciur5[i/5];
upd(r);
if(mod==2 && d[2])
++cnt;
else
if(mod==3 && d[3])
++cnt;
else
if(mod==4 && d[2]>1)
++cnt;
else
if(mod==5 && d[5])
++cnt;
else
if(mod==6 && min(d[2],d[3]))
++cnt;
while(inmul>r/2+1)
{
upd(inmul);
sct(imp);
--inmul;
++imp;
if(mod==2 && d[2])
++cnt;
else
if(mod==3 && d[3])
++cnt;
else
if(mod==4 && d[2]>1)
++cnt;
else
if(mod==5 && d[5])
++cnt;
else
if(mod==6 && min(d[2],d[3]))
++cnt;
}
if(r%2==0)
{
cnt*=2;
upd(inmul);
sct(imp);
--inmul;
++imp;
if(mod==2 && d[2])
++cnt;
else
if(mod==3 && d[3])
++cnt;
else
if(mod==4 && d[2]>1)
++cnt;
else
if(mod==5 && d[5])
++cnt;
else
if(mod==6 && min(d[2],d[3]))
++cnt;
}
else
{
cnt*=2;
}
cout<<cnt;
return 0;
}