Pagini recente » Cod sursa (job #2989026) | Cod sursa (job #2584229) | Cod sursa (job #1862370) | Cod sursa (job #2360485) | Cod sursa (job #1142729)
#include <fstream>
using namespace std;
ifstream fin("dreptunghiuri.in");
ofstream fout("dreptunghiuri.out");
int N, M;
long long sol;
int rad[161604];
void precompute()
{
for (int i = 1; i <= 400; ++i)
rad[i * i] = i;
}
int solve(int H, int W)
{
int nrd = 0;
for (int A = 1; A <= H; ++A)
{
int delta = W * W - 4 * A * (H - A);
if (delta < 0)
continue;
else if (delta == 0)
{
if (W % 2 == 0)
++nrd;
continue;
}
else
{
delta = rad[delta];
if (delta == 0)
continue;
if ((W + delta) % 2 == 0 && 1 <= (W + delta) / 2 && (W + delta) / 2 <= W)
++nrd;
if ((W - delta) % 2 == 0 && 1 <= (W - delta) / 2 && (W - delta) / 2 <= W)
++nrd;
}
}
return nrd;
}
int main()
{
fin >> N >> M;
--N;
--M;
precompute();
sol = 0;
for (int i = 1; i <= N; ++i)
for (int j = 1; j <= M; ++j)
sol += solve(i, j) * (N - i + 1) * (M - j + 1);
fout << sol << '\n';
fin.close();
fout.close();
return 0;
}