Pagini recente » Cod sursa (job #2663498) | Cod sursa (job #1275515) | Cod sursa (job #3290132) | Cod sursa (job #2440229) | Cod sursa (job #4839)
Cod sursa(job #4839)
#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;
bool ok;
for (i = 1; i < N; ++i)
for (j = 1; j < M; ++j)
for (k = 0; k < i; ++k) {
ok = true;
c = k * (i * k);
if (c % j) ok = false;
d = -1;
if (c / j < NMAX2)
d = SQ[c / j];
if (d < 0 || d > j) ok = false;
if (ok)
cnt += (N - i) * (M - j);
// printf("%d %d %d %lld\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;
}