Pagini recente » Cod sursa (job #444416) | Cod sursa (job #1958355) | Cod sursa (job #1685374) | Cod sursa (job #1094805) | Cod sursa (job #4838)
Cod sursa(job #4838)
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int NMAX = 401;
const int NMAX2 = NMAX * NMAX;
int N, M;
int SQ[NMAX2];
long long cnt;
void read() {
FILE *fin = fopen("dreptunghiuri.in", "rt");
fscanf(fin, " %d %d", &N, &M);
if (M > N) swap(N, M);
fclose(fin);
}
void prepare() {
int i;
memset(SQ, 0xff, sizeof(SQ));
for (i = 0; i < NMAX; ++i)
SQ[i * i] = i;
}
void count() {
int i, j, k;
int c, d, f;
bool ok;
for (i = 1; i < N; ++i)
for (j = 1; j <= i; ++j)
for (k = 0; k < i; ++k) {
ok = true;
c = k * (i * k);
if (c % j) ok = false;
if (c / j < NMAX2)
d = SQ[c / j];
else
d = - 1;
if (d < 0 || d > j) ok = false;
if (ok) {
f = 0;
if (i < M && i != j) ++f;
cnt += (N - i) * (M - j) << f;
}
// printf("%d %d %d %d\n", i, j, k, cnt);
}
}
void afisare() {
FILE *fout = fopen("dreptunghiuri.out", "wt");
fprintf(fout, "%lld\n", cnt);
fclose(fout);
}
int main() {
read();
prepare();
count();
afisare();
return 0;
}