Pagini recente » Cod sursa (job #2328847) | Cod sursa (job #517737) | Cod sursa (job #961778) | Cod sursa (job #702292) | Cod sursa (job #2491746)
#include <fstream>
using namespace std;
ifstream fin("dreptunghiuri.in");
ofstream fout("dreptunghiuri.out");
const int NMax = 400;
long long Sol, N, M, Sqrt[NMax * NMax + 5];
int Count(int l, int L)
{
int Ans = 0;
for(int A = 1; A < l / 2; A++)
{
///C^2 - LC + A(l - A) = 0
int delta = L * L - 4 * A * (l - A);
if(delta == 0 && (L % 2 == 0))
Ans++;
else if(delta > 0 && Sqrt[delta] != 0)
{
delta = Sqrt[delta];
int c1 = (L + delta) / 2, c2 = (L - delta) / 2;
if(0 < c1 && c1 < L && ((L + delta) % 2 == 0))
Ans++;
if(0 < c2 && c2 < L && ((L - delta) % 2 == 0))
Ans++;
}
}
Ans *= 2;
if(l % 2 == 0)
{
int A = l / 2;
int delta = L * L - 4 * A * (l - A);
if(delta == 0 && (L % 2 == 0))
Ans++;
else if(delta > 0 && Sqrt[delta] != 0)
{
delta = Sqrt[delta];
int c1 = (L + delta) / 2, c2 = (L - delta) / 2;
if(0 < c1 && c1 < L && ((L + delta) % 2 == 0))
Ans++;
if(0 < c2 && c2 < L && ((L - delta) % 2 == 0))
Ans++;
}
}
return Ans + 1;
}
int main()
{
fin >> N >> M;
N--, M--;
for(int i = 1; i <= N; i++)
Sqrt[i * i] = i;
for(int i = 1; i <= N; i++)
for(int j = 1; j <= M; j++)
Sol += Count(i, j) * (N - i + 1) * (M - j + 1);
fout << Sol << '\n';
fin.close();
fout.close();
return 0;
}