[Matematica pura, fisica, chimica, ecc.: problemi di allenamento del cervello non legati in alcun modo al commercio - pagina 321

 
Mathemat >>:

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

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

Sì, sono d'accordo. Ho iniziato a scrivere e mi sono subito reso conto che il lungo sarebbe semplicemente traboccato.

// Ma non mi aspetto alcun problema con lo stack a 30 (o anche 300) cifre.

Ho già trovato un modo iterativo (in un ciclo), ma... la dimensione del bit del prodotto non è comunque sufficiente.

 
MetaDriver писал(а) >>

Sì, sono d'accordo. Ho iniziato a scrivere e ho capito subito che il lungo semplicemente trabocca.

E non abbiamo bisogno della ricorsione, potrebbe essere più semplice, ho già trovato il modo iterativo (in un ciclo), ma... la profondità di bit per prodotto non è comunque sufficiente.


Long dovrebbe essere cambiato in String, per quanto sciocco possa sembrare.

 
Richie >>:


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

Non sembra troppo stupido, solo la moltiplicazione e l'addizione dovranno essere riscritte a mano.

Va bene, ma la velocità andrà nella sabbia, e per i numeri a 30 cifre ci vorrà molto tempo per contare.

// Vero, è ancora un ordine o due più veloce su mcl5 che su Wasik :-P

 
Cosa c'entra questo con il lungo? È tutta una questione di numeri. Sì, lo so, vuoi stipare tutto in un solo ciclo. Prova a estrarre la 17a cifra dal lato sinistro di un numero di 30 cifre.
Ogni numero è un array o una stringa di cifre. Aumentare un numero è un compito di modellazione manuale.
È un tempo lungo comunque, il collisore lavorerà più velocemente :)
 
Conclusione - abbiamo bisogno di un algoritmo diverso, NON di un'esagerazione. O ricerca intelligente.
Per esempio, è chiaro che dobbiamo cercare solo insiemi di cifre, e il fatto che questi numeri messi in fila possano formare qualche numero per il problema non è importante.
Inoltre - se la somma dei numeri è un numero primo - viene saltato.
E così via.
 
Mathemat >>:
А при чем тут лонг? Тут же исключительно с цифирями работа. Ну да, понимаю, хоцца все в один цикл всунуть. Дык попробуй-ка 17-ю цифру слева у 30-разрядного числа быстро извлечь.

Lungo con il prodotto di 30 numeri in media 5 == 5^30

// ~ == 9.31323E+20 (e il lungo si adatta a un massimo di 15 cifre decimali)

;)

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

Penso che la risposta non possa essere più del 1976. ma le prove sono ancora difficili da trovare.

 
Un fatto dal libro di Cohen sulle equazioni diofantine:

Questa rappresentazione di 30 come somma di tre cubi non era conosciuta fino a poco tempo fa (questa è la prima soluzione trovata per il numero 30; la rappresentazione di 30 per tre cubi è stata a lungo un'ipotesi). Trovato, ovviamente, su un computer. L'ordine dei numeri (già cubi) è solo circa 30 cifre.
È improbabile che sia stato fatto con una stupida forza 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

Niente da fare...
E questo è l'aspetto di un algoritmo perl:


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

 
admin >>:

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

.....


È solo un programmatore.... non così tanto.

Posso farlo in quattro o cinque righe in Wasik.

:)

Motivazione: