Pagini recente » Cod sursa (job #1018431) | Cod sursa (job #2215625) | Cod sursa (job #2111692) | Cod sursa (job #1942155) | Cod sursa (job #2610370)
#include <bits/stdc++.h>
using namespace std;
ifstream in("pascal.in");
ofstream out("pascal.out");
int n,k;
char nrDiv[5000001];
char nrDiv2[5000001];
int d1,d2,Up;
int dp1,dp2,Up2;
int suma;
int main()
{
in>>n>>k;
if(k!=4 && k!=6)
{
for(int r=k; r<=n; r*=k)
for(int l=r; l<=n; l+=r)
nrDiv[l]++;
}
else if(k==4)
{
for(int r=2; r<=n; r*=2)
for(int l=r; l<=n; l+=r)
nrDiv[l]++;
}
else
{
for(int r=2; r<=n; r*=2)
for(int l=r; l<=n; l+=r)
nrDiv[l]++;
for(int r=3; r<=n; r*=3)
for(int l=r; l<=n; l+=r)
nrDiv2[l]++;
}
if(k!=6)
{
for(int i=1; i<=n; i++)
Up+=nrDiv[i];
d2=Up;
}
else
{
for(int i=1; i<=n; i++)
Up+=nrDiv[i];
d2=Up;
for(int i=1; i<=n; i++)
Up2+=nrDiv2[i];
dp2=Up2;
}
for(int i=1; i<=n/2; i++)
{
if(k!=6)
{
d1+=nrDiv[i];
d2-=nrDiv[n-i+1];
}
else
{
d1+=nrDiv[i];
d2-=nrDiv[n-i+1];
dp1+=nrDiv2[i];
dp2-=nrDiv2[n-i+1];
}
if(k!=4 && k!=6)
{
if(d1+d2<Up)
suma+=2;
}
else if(k==4)
{
if( (d1+d2)/2 < Up/2 )
suma+=2;
}
else
{
if( min(d1+d2,dp1+dp2) < min(Up,Up2) )
suma+=2;
}
}
if(n%2==0)
{
if(k!=4 && k!=6)
{
if(d1+d2<Up)
suma--;
}
else if(k==4)
{
if( (d1+d2)/2 < Up/2 )
suma--;
}
else
{
if( min(d1+d2,dp1+dp2) < min(Up,Up2) )
suma--;
}
}
out<<suma;
return 0;
}