[Archiv!] Reine Mathematik, Physik, Chemie usw.: Gehirntrainingsprobleme, die in keiner Weise mit dem Handel zusammenhängen - Seite 321

 
Mathemat >>:

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

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

Ja, ich stimme zu. Ich fing an zu schreiben und merkte sofort, dass long einfach überlaufen würde.

// Aber ich erwarte keine Probleme mit Stack bei 30 (oder sogar 300) Stellen.

Ich habe bereits einen iterativen Weg (in einer Schleife) gefunden, aber... die Bitgröße des Produkts ist ohnehin nicht ausreichend.

 
MetaDriver писал(а) >>

Ja, ich stimme zu. Ich fing an zu schreiben und verstand sofort, dass die Länge einfach überlaufen wird.

Und wir brauchen keine Rekursion, es könnte einfacher sein, ich habe bereits einen iterativen Weg (in einer Schleife) gefunden, aber... die Bittiefe pro Produkt ist sowieso nicht genug.


Long sollte in String geändert werden, so dumm das auch klingen mag.

 
Richie >>:


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

Das klingt nicht allzu dumm, nur die Multiplikation und die Addition müssen von Hand umgeschrieben werden.

Das ist in Ordnung, aber die Geschwindigkeit geht in den Sand, und bei 30-stelligen Zahlen dauert das Zählen sehr lange.

// Stimmt, auf mcl5 geht es immer noch ein oder zwei Nummern schneller als auf Wasik :-P

 
Was hat das mit "lang" zu tun? Es geht nur um Zahlen. Ja, ich weiß, Sie wollen alles in einer Schleife machen. Versuchen Sie, die 17. Ziffer von der linken Seite einer 30-stelligen Zahl zu extrahieren.
Jede Zahl ist ein Array oder eine Kette von Ziffern. Das Erhöhen einer Zahl ist eine manuelle Modellierungsaufgabe.
Es ist immer noch eine lange Zeit, der Collider wird schneller arbeiten :)
 
Fazit: Wir brauchen einen anderen Algorithmus, KEIN Overkill. Oder Intelligente Suche.
Es ist zum Beispiel klar, dass wir nur Mengen von Ziffern suchen müssen, und die Tatsache, dass diese Zahlen aneinandergereiht eine Zahl für das Problem bilden können, ist nicht wichtig.
Weitere - wenn die Summe der Zahlen eine Primzahl ist - wird übersprungen.
Und so weiter.
 
Mathemat >>:
А при чем тут лонг? Тут же исключительно с цифирями работа. Ну да, понимаю, хоцца все в один цикл всунуть. Дык попробуй-ка 17-ю цифру слева у 30-разрядного числа быстро извлечь.

Long mit dem Produkt von 30 Zahlen, die den Durchschnitt von 5 ergeben == 5^30

~ == 9.31323E+20 (und der Long passt auf maximal 15 Nachkommastellen)

;)

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

Ich denke, die Antwort kann nicht mehr als 1976 lauten, aber die Beweise sind immer noch schwer zu finden.

 
Eine Tatsache aus Cohens Buch über diophantische Gleichungen:

Diese Darstellung von 30 als Summe von drei Würfeln war bis vor kurzem nicht bekannt (dies ist die erste Lösung, die für die Zahl 30 gefunden wurde; die Darstellung von 30 durch drei Würfel war lange eine Hypothese). Natürlich auf einem Computer gefunden. Die Reihenfolge der Zahlen (die bereits gewürfelt sind) beträgt nur etwa 30 Ziffern.
Es ist unwahrscheinlich, dass dies mit brachialer Gewalt geschehen ist.
 
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

Das gibt's doch nicht...
Und so sieht ein Perl-Algorithmus aus:


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

 
admin >>:

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

.....


Er ist nur ein Programmierer.... Soso.

Ich kann das in vier oder fünf Zeilen in Wasik erledigen.

:)

Grund der Beschwerde: