[Arquivo!] Pura matemática, física, química, etc.: problemas de treinamento do cérebro não relacionados ao comércio de qualquer forma - página 321

 
Mathemat >>:

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

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

Sim, eu concordo. Começou a escrever e imediatamente se deu conta de que o tempo iria simplesmente transbordar.

// Mas não espero nenhum problema com a pilha de 30 (ou mesmo 300) dígitos.

Já encontrei uma forma iterativa (em um loop), mas... a profundidade de bit para o produto não é suficiente de qualquer forma.

 
MetaDriver писал(а) >>

Sim, eu concordo. Comecei a escrever e imediatamente compreendi que o longo vai simplesmente transbordar.

E não precisamos de repetição, poderia ser mais simples, eu já achei iterativo (de uma só vez), mas... a profundidade de bit por produto não é suficiente de qualquer forma.


O longo deve ser mudado para String, por mais tolo que possa parecer.

 
Richie >>:


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

Não soa muito estúpido, apenas a multiplicação e a adição terão que ser reescritas à mão.

Está bem, mas a velocidade vai na areia, e para números de 30 dígitos levará muito tempo para contar.

// Verdade, ainda é uma ordem ou duas mais rápidas no mcl5 do que no Wasik :-P

 
O que isso tem a ver com o tempo? É tudo uma questão de números. Sim, eu sei, você quer enfiar tudo em um só laço. Tente extrair o 17º dígito do lado esquerdo de um número de 30 dígitos.
Cada número é uma matriz ou uma seqüência de dígitos. Aumentar um número é uma tarefa de modelagem manual.
É muito tempo de qualquer forma, o colisor funcionará mais rápido :)
 
Conclusão - precisamos de um algoritmo diferente, NÃO exagero. Ou Busca Inteligente.
Por exemplo, é claro que precisamos procurar apenas conjuntos de dígitos, e o fato de que estes números colocados em fila podem formar algum número para o problema não é importante.
Além disso - se a soma dos números for um número primo - é ignorado.
E assim por diante.
 
Mathemat >>:
А при чем тут лонг? Тут же исключительно с цифирями работа. Ну да, понимаю, хоцца все в один цикл всунуть. Дык попробуй-ка 17-ю цифру слева у 30-разрядного числа быстро извлечь.

Longo com o produto de 30 números em média 5 == 5^30

// ~ == 9,31323E+20 (e o comprimento cabe num máximo de 15 casas decimais)

;)

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

Acho que a resposta não pode ser mais do que 1976, mas a prova ainda é difícil de ser encontrada.

 
Um fato do livro de Cohen sobre equações de Diophantine:

Esta representação de 30 como uma soma de três cubos não era conhecida até recentemente (esta é a primeira solução encontrada para o número 30; a representação de 30 por três cubos tem sido uma hipótese há muito tempo). Encontrado, é claro, em um computador. A ordem dos números (já em cubos) é de apenas cerca de 30 dígitos.
É improvável que isso tenha sido feito por força bruta burra.
 
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 jeito nenhum...
E isto é o que parece um algoritmo de perl:


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

 
admin >>:

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

.....


Ele é apenas um programador.... mais ou menos.

Posso fazer isso em quatro ou cinco linhas em Wasik.

:)

Razão: