Encontrar todos los trillizos $(a,b,c)$ menor o igual a 50, de manera que $a + b +c$ sea divisible por $a$ y $b$ y $c$ .(es decir $a|a+b+c,b|a+b+c,c|a+b+c$ ) por ejemplo $(10,20,30)$ es un buen triplete. ( $10|60 , 20|60 , 30|60$ ).
Nota: $a,b,c\leq 50$ y $a,b,c\in N$ .
De otra manera la pregunta dice que hay que encontrar todos $(a,b,c)$ tal que $lcm(a,b,c) | a+b+c$
Después de escribir diferentes situaciones, descubrí que si $gcd(a,b,c) = d$ entonces todos los tripletes tienen la forma de $(d,2d,3d)$ o $(d,d,d)$ o $(d,d,2d)$ son respuestas. (por supuesto la permutación de estas como $(2d,3d,d)$ también es una respuesta). Me da $221$ diferentes trillizos. Lo he comprobado con un simple programa Java y la respuesta es correcta pero no puedo decir por qué otras formas no son válidas. Puedo escribir otros formularios y comprobarlos uno por uno pero quiero una solución más inteligente que escribir todos los demás formularios. ¿Alguien puede ayudar?
Mi código java: (Todas las salidas están en forma de $(d,d,d)$ o $(d,2d,3d)$ o $(d,d,2d)$ y sus permutaciones).
import java.util.ArrayList;
import java.util.Collections;
public class Main {
public static void main(String[] args) {
int count = 0;
for (int i = 1; i <= 50; i++) {
for (int j = 1; j <= 50; j++) {
for (int k = 1; k <= 50; k++) {
int s = i + j + k;
if (s % i == 0 && s % j == 0 && s % k == 0 && i != j && j != k && i != k) {
ArrayList<Integer> array = new ArrayList<Integer>();
array.clear();
int g = gcd(gcd(i, j), k);
array.add(i / g);
array.add(j / g);
array.add(k / g);
Collections.sort(array);
int condition = 4; //To find out whether it is (d,d,d) or (d,d,2d) or (d,2d,3d)
if (array.get(0) == 1 && array.get(1) == 1 && array.get(2) == 1) {
condition = 1;
}
if (array.get(0) == 1 && array.get(1) == 1 && array.get(2) == 2) {
condition = 2;
}
if (array.get(0) == 1 && array.get(1) == 2 && array.get(2) == 3) {
condition = 3;
}
System.out.printf("%d %d %d ::: Condition: %d\n", i, j, k, condition);
count++;
}
}
}
}
System.out.println(count);
}
public static int gcd(int a, int b) {
if (b == 0) {
return a;
} else
return gcd(b, a % b);
}
}