Pagini recente » Cod sursa (job #2357487) | Cod sursa (job #2037143) | Cod sursa (job #1229632) | Cod sursa (job #2076346)
#include <cstdio>
using namespace std;
#define LIM 5000002
int doi[LIM],trei[LIM],cinci[LIM];
int r , d , res;
void Compute(){
int i , p;
for( p = 2; p < LIM; p *= 2 )
for( i = p; i < LIM; i += p )
doi[i]++;
for( p = 3; p < LIM; p *= 3 )
for( i = p; i < LIM; i += p )
trei[i]++;
for( p = 5; p < LIM; p *= 5 )
for( i = p; i < LIM; i += p )
cinci[i]++;
for( i = 1; i < LIM; i ++ ){
doi[i] += doi[i-1];
trei[i] += trei[i-1];
cinci[i] += cinci[i-1]; }
}
void Solve()
{
int i , a , b , c , dif = 0;
for ( i = 1; i <= r/2 ; i ++ ){
if ( d == 2 )
{
a = doi[r];
b = doi[i];
c = doi[r-i];
if ( a > b+c )
res++;
if ( r%2 == 0 && i == r/2 && a > b+c )
dif = 1;
}
else if ( d == 3 )
{
a = trei[r];
b = trei[i];
c = trei[r-i];
if ( a > b+c )
res++;
if ( r%2 == 0 && i == r/2 && a > b+c )
dif = 1;
}
else if ( d == 5 )
{
a = cinci[r];
b = cinci[i];
c = cinci[r-i];
if ( a > b+c )
res++;
if ( r%2 == 0 && i == r/2 && a > b+c )
dif = 1;
}
else if ( d == 4 )
{
a = doi[r];
b = doi[i];
c = doi[r-i];
if ( a >= b+c+2 )
res++;
if ( r%2 == 0 && i == r/2 && a > b+c+2 )
dif = 1;
}
else if ( d == 6 )
{
a = doi[r];
b = doi[i];
c = doi[r-i];
if ( a > b+c )
{
a = trei[r];
b = trei[i];
c = trei[r-i];
if ( a > b+c )
res++;
if ( r%2 == 0 && i == r/2 && a > b+c )
dif = 1;
}
}
}
res *= 2 , res -= dif;
printf ( "%d" , res );
}
int main()
{
freopen("pascal.in","r",stdin);
freopen("pascal.out","w",stdout);
scanf ( "%d%d" , &r , &d );
Compute();
Solve();
}