http://www.bnuoj.com/bnuoj/contest_show.php?cid=2322#problem/25802
// File Name: bo_jwolf4.cpp
// Author: rudolf
// Created Time: 2013年08月25日 星期日 13:47:10
#include<vector>
#include<list>
#include<map>
#include<set>
#include<deque>
#include<stack>
#include<bitset>
#include<algorithm>
#include<functional>
#include<numeric>
#include<utility>
#include<sstream>
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<ctime>
using namespace std;
#define maxn 1000005
bool vis[ maxn ] ;
int n ;
int gcd( int a , int b )
{
return b == 0 ? a : gcd( b , a % b ) ;
}
int main()
{
while( cin >> n )
{
memset( vis , false , sizeof( vis ) ) ;
int ans = 0 ;
int Max1 = sqrt( ( double )n - 1 ) ;
for( int i = 2 ; i <= Max1 ; ++i )
{
int Max2 = sqrt( (double) n - i *i ) ;
Max2 = Max2 >= i ? i - 1 : Max2 ;
for( int j = 1 ; j <= Max2 ; ++j )
{
if( i % 2 != j % 2 )
{
if( gcd( i , j ) == 1 )
{
ans ++ ;
int a = i * i - j * j ;
int b = 2 * i * j ;
int c = i * i + j * j ;
for( int k = 0 ; c * k <= n ; ++k )
{
vis[ k * a ] = vis[ k * b ] = vis[ k * c ] = true ;
}
}
}
}
}
cout << ans << " " ;
ans = 0 ;
for( int i = 1 ; i <= n ; ++i )
if(! vis[ i ] )
ans++ ;
cout << ans << endl ;
}
return 0;
}