#include #include using namespace std; int main(int argc, char* argv[]) { int N,D; cin>>N>>D; map xyMap; map wzMap; map::iterator mit; for (int x=1;x<=N;x++){ for (int y=1;y<=N;y++){ int xy=x*x+y*y; mit=xyMap.find(xy); if (mit==xyMap.end()){ xyMap[xy]=1; }else{ (*mit).second++; } int wz=x*x-y*y+D; if (wz<2){ continue; } mit=wzMap.find(wz); if (mit==wzMap.end()){ wzMap[wz]=1; }else{ (*mit).second++; } } } int ans=0; map::iterator mit1; while (true){ mit=xyMap.begin(); if (mit==xyMap.end()){ break; } while (true){ mit1=wzMap.begin(); if (mit1==wzMap.end()){ break; } if ((*mit).first>(*mit1).first){ wzMap.erase(mit1); }else if ( (*mit).first==(*mit1).first){ ans+=(*mit).second * (*mit1).second; wzMap.erase(mit1); break; }else{ break; } } mit1=wzMap.begin(); if (mit1==wzMap.end()){ break; } xyMap.erase(mit); } xyMap.clear(); wzMap.clear(); cout<