Pagini recente » Cod sursa (job #423440) | Cod sursa (job #956816) | Istoria paginii runda/sim04 | Cod sursa (job #2153151) | Cod sursa (job #1825631)
#include <cstdio>
int r, nr2[5000001], nr3[5000001], nr5[5000001];
using namespace std;
void set2( )
{
int i, j;
for( i=2;i<=r;i*=2 )
for( j=i;j<=r;j+=i )
nr2[j]++;
}
void set3( )
{
int i, j;
for( i=3;i<=r;i*=3 )
for( j=i;j<=r;j+=i )
nr3[j]++;
}
void set5( )
{
int i, j;
for( i=5;i<=r;i*=5 )
for( j=i;j<=r;j+=i )
nr5[j]++;
}
int main()
{
freopen( "pascal.in", "r", stdin );
freopen( "pascal.out", "w", stdout );
int div, i, d2=0, d3=0, d5=0, n=0;
scanf( "%d%d", &r, &div );
if( div%2==0 )
set2();
if( div%3==0 )
set3();
if( div%5==0 )
set5();
switch( div )
{
case 2:
for( i=1;i<(r+1)/2;i++ )
{
d2+=nr2[r-i+1]-nr2[i];
if( d2>0 )
n++;
}
break;
case 3:
for( i=1;i<(r+1)/2;i++ )
{
d3+=nr3[r-i+1]-nr3[i];
if( d3>0 )
n++;
}
break;
case 4:
for( i=1;i<(r+1)/2;i++ )
{
d2+=nr2[r-i+1]-nr2[i];
if( d2>1 )
n++;
}
break;
case 5:
for( i=1;i<(r+1)/2;i++ )
{
d5+=nr5[r-i+1]-nr5[i];
if( d5>0 )
n++;
}
break;
case 6:
for( i=1;i<(r+1)/2;i++ )
{
d2+=nr2[r-i+1]-nr2[i];
d3+=nr3[r-i+1]-nr3[i];
if( d2>0 && d3>0 )
n++;
}
break;
}
n*=2;
if( r%2==0 )
{
switch( div )
{
case 2:
d2+=nr2[r-i+1]-nr2[i];
if( d2>0 )
n++;
break;
case 3:
d3+=nr3[r-i+1]-nr3[i];
if( d3>0 )
n++;
break;
case 4:
d2+=nr2[r-i+1]-nr2[i];
if( d2>1 )
n++;
break;
case 5:
d5+=nr5[r-i+1]-nr5[i];
if( d5>0 )
n++;
break;
case 6:
d2+=nr2[r-i+1]-nr2[i];
d3+=nr3[r-i+1]-nr3[i];
if( d2>0 && d3>0 )
n++;
break;
}
}
printf( "%d", n );
return 0;
}