// corrígeme si estoy equivocado, pero no son números amigables 2-tuplas cuya // suma de divisores es igual al otro número, por lo que no puede ser hasta n,
// tiene que haber dos límites, uno para el primer elemento y otro para el
// segundo elemento.
// Entonces, esta pregunta podría expresarse mejor como los números amistosos hasta
//Minnesota
// El siguiente código está escrito en C99.
int get_sum_of_divisors (int num) {
int suma = 0;
para (int i = 1; i <num; i ++) / * vamos por menos que porque no queremos el número en sí * / {
if ((num% i) == 0) {
suma + = i;
}
}
suma de retorno;
}
nulo amicable_nums (int n, int m) {
int i = 1;
int j = 1;
mientras que (j <m) {
mientras que (i <n) {
si (i == j) {
i ++;
continuar;
} más {
int a = get_sum_of_divisors (i);
int b = get_sum_of_divisors (j);
if (a == j && b == i) {
printf (“% d y% d \ n”, i, j);
i ++;
continuar;
}
}
}
j ++;
}
}
El código es bastante sencillo y fácil de entender (porque podría escribirlo jajaja). El análisis de la complejidad temporal del algoritmo es [matemática] \ sum_ {i = 0} ^ {m} O (n ^ 2). [/ Matemática]
Es O (n ^ 2) porque cada vez, verifica los divisores que suceden en [math] \ sum_ {i = 0} ^ {num} O (1) [/ math] y el total se evalúa como O (1) + O (1) …… = O (n).
- Cómo determinar el número total de triángulos degenerados sin bucles de una longitud determinada (más de 3)
- ¿Qué criterios utiliza para determinar si un artículo / publicación es útil para usted?
- ¿Qué se necesita para hacer un compilador para C ++?
- ¿Cómo debo estudiar combinatoria?
- ¿Cuál es el mejor lenguaje de codificación para las cosas matemáticas? ¿Dónde puedo aprenderlo?
Eso evalúa aproximadamente a O (n ^ 3) como un análisis de complejidad de acuerdo con las formas cerradas. Probablemente este no sea el algoritmo más eficiente, pero resolverá el problema. Lo probaré en la unidad mientras escribo esto en mi teléfono.