Pagini recente » Cod sursa (job #1446389) | Cod sursa (job #1619775) | Cod sursa (job #722141) | Cod sursa (job #2296459) | Cod sursa (job #2839851)
#include <stdio.h>
int right;
int c[ 1000001 ];
bool ok[ 1000001 ];
void Eratostene() {
for( int i = 2; i <= right; i++ )
if( !c[ i ] ) {
for( int j = i; j <= right; j += i )
c[ j ]++;
if( right / i >= i )
for( int j = i * i; j <= right; j += i * i )
ok[ j ] = 1;
}
}
int n, m;
int op[] = { 1, -1 };
int main()
{
FILE *fin = fopen( "mins.in", "r" );
fscanf( fin, "%d %d", &n, &m );
fclose( fin );
--n, --m;
right = ( n <= m ? n : m );
{Eratostene();}
long long sol = ( long long )n * m;
for( int i = 2; i <= right; i++ )
if( !ok[ i ] )
sol += op[ c[ i ] & 1 ] * ( long long )( n / i ) * ( m / i );
FILE *fout = fopen( "mins.out", "w" );
fprintf( fout, "%lld\n", sol );
fclose( fout );
return 0;
}