Pagini recente » Cod sursa (job #2885199) | Cod sursa (job #3131469) | Cod sursa (job #1035588) | Cod sursa (job #1471168) | Cod sursa (job #209331)
Cod sursa(job #209331)
#include <stdio.h>
#define inf 1000000
#define maxn 410
#define min(a,b) (a < b ? a : b)
#define ll long long
int n, m;
short p[maxn][maxn], d[maxn][maxn];
ll sol;
int GCD(int a, int b)
{
while (b)
{
int aux = a % b;
a = b;
b = aux;
}
return a;
}
int main()
{
freopen("dreptunghiuri.in", "r", stdin);
freopen("dreptunghiuri.out", "w", stdout);
scanf("%d %d ", &n, &m);
if (n>200 && m>200) return 0;
n--, m--;
int i, j, k, x, y, z, v, aux;
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
{
p[i][j] = GCD(i, j);
d[i][j] = i/j;
}
for (i=0; i<=n; ++i)
for (j=i+1; j<=n; ++j)
{
sol += m * (m+1) / 2;
for (k=1; k<=m; ++k)
{
aux = p[j-i][k];
y = d[j-i][aux];
z = d[k][aux];
v = min(d[n-j][z], d[m-k][y]);
x = m-k+1 - v * y;
aux = v*x + ((v*(v-1)*y) >> 1);
sol += aux;
}
}
printf("%lld\n", sol);
return 0;
}