[Archivo] Matemáticas puras, física, química, etc.: problemas de entrenamiento cerebral no relacionados con el comercio de ninguna manera - página 321

 
Mathemat >>:

Вариантов нет. Для 30 знаков нужно как-то эффективно ограничивать перебор.

Рекурсию, наверно, бесполезно (если число знаков больше 10).

Sí, estoy de acuerdo. Empezó a escribir e inmediatamente se dio cuenta de que el tiempo se desbordaría.

// Pero no espero ningún problema con la pila a 30 (o incluso 300) dígitos.

Ya he encontrado una forma iterativa (en un bucle), pero... la profundidad de bits para el producto no es suficiente de todos modos.

 
MetaDriver писал(а) >>

Sí, estoy de acuerdo. Empecé a escribir e inmediatamente comprendí que el largo se desbordará.

Y no necesitas recursividad, podría ser más sencillo, ya he encontrado una forma iterativa (en un bucle), pero... la profundidad de bits por producto no es suficiente de todos modos.


Long debería cambiarse por String, aunque parezca una tontería.

 
Richie >>:


Long нужно на String менять, как бы глупо это не звучало.

No parece demasiado estúpido, sólo que la multiplicación y la suma tendrán que reescribirse a mano.

Está bien, pero la velocidad se irá a la arena, y para los números de 30 dígitos se tardará mucho en contar.

// Es cierto, sigue siendo un orden o dos más rápido en mcl5 que en Wasik :-P

 
¿Qué tiene que ver esto con el tiempo? Todo es cuestión de números. Sí, lo sé, quieres meter todo en un bucle. Intenta extraer el 17º dígito de la parte izquierda de un número de 30 dígitos.
Cada número es una matriz o una cadena de dígitos. Aumentar un número es una tarea de modelado manual.
De todas formas es mucho tiempo, el colisionador funcionará más rápido :)
 
Conclusión - necesitamos un algoritmo diferente, NO exagerado. O la búsqueda inteligente.
Por ejemplo, está claro que necesitamos buscar sólo conjuntos de dígitos, y el hecho de que estos números puestos en fila puedan formar algún número para el problema no es importante.
Además, si la suma de los números es un número primo, se omite.
Y así sucesivamente.
 
Mathemat >>:
А при чем тут лонг? Тут же исключительно с цифирями работа. Ну да, понимаю, хоцца все в один цикл всунуть. Дык попробуй-ка 17-ю цифру слева у 30-разрядного числа быстро извлечь.

Largo con el producto de 30 números de media 5 == 5^30

// ~ == 9.31323E+20 (y el largo se ajusta a un máximo de 15 decimales)

;)

 
MetaDriver >>:
Вожусь немножко с №226.
Вьехал, что точки лежат не только на окружностях с центром в точке == центру многоугольника,
но и на наборе окружностей "половинного" диаметра прижатых к краям 1976-угольника.
Это легко понять, если представить себе место середин точек всех хорд пересекающих окружность одним из своих концов в фиксированной точке.
Возможно на этих окружностях лежат ещё какие-то "полуточки". (с) Т.е. ответ будет возможно больше чем очевидный минимум (1976).
Думаю дальше.
// Кстати, 1976 == 2*2*2*13*19
// Не знаю поможет ли это делу. Но во внимание принимаю. :)

Creo que la respuesta no puede ser más de 1976. pero las pruebas siguen siendo difíciles de conseguir.

 
Un dato del libro de Cohen sobre ecuaciones diofantinas:

Esta representación de 30 como suma de tres cubos no se conocía hasta hace poco (se trata de la primera solución encontrada para el número 30; la representación de 30 por tres cubos ha sido durante mucho tiempo una hipótesis). Encontrado, por supuesto, en un ordenador. El orden de los números (ya cubos) es sólo de unos 30 dígitos.
Es poco probable que se haya hecho por fuerza bruta.
 
Richie >>:

Вот сама программка:
-
'Объява
Dim M As Long
Dim N As Long
Dim Koeficient As Long

Private Sub Command1_Click()
Dim MaxChislo As Long
Dim MinChislo As Long
Dim i As Long
Dim strok As String
'Задаём исходные данные
MinChislo = 1
MaxChislo = 100000
Koeficient = 128
For i = MinChislo To MaxChislo
strok = LTrim(RTrim(Str(i)))
If ProizCifr(strok) / SumCifr(strok) = Koeficient Then
Print strok
Else
'Print "Ни фига не найдено"
End If
Next i
End Sub

'РАСЧЁТ СУММЫ
Private Function SumCifr(Stroca As String) As Long
Dim i As Long
Dim Summa As Long
Dim Cifra As Long
For i = 1 To Len(Stroca)
Cifra = Val(Mid(Stroca, i, 1))
Summa = Summa + Cifra
Next i
SumCifr = Summa
End Function

'РАСЧЁТ ПРОИЗВЕДЕНИЯ
Private Function ProizCifr(Stroca As String) As Long
Dim i As Long
Dim Proiz As Long
Dim Cifra As Long
Proiz = 1
For i = 1 To Len(Stroca)
Cifra = Val(Mid(Stroca, i, 1))
Proiz = Proiz * Cifra
Next i
ProizCifr = Proiz
End Function

De ninguna manera...
Y este es el aspecto de un algoritmo perl:


for(111..999){
split(//,$_);
my($sum,$mul)=(0,1);
for(@_){$sum+=$_;$mul*=$_;}
print("$_\n") if($sum*12==$mul);
}

 
admin >>:

Ни фига себе..
А вот как выглядит алгоритм на perl:

.....


Sólo es un programador.... más o menos.

Puedo hacerlo en cuatro o cinco líneas en Wasik.

:)

Razón de la queja: