[Archives] Mathématiques pures, physique, chimie, etc. : problèmes d'entraînement cérébral sans rapport avec le commerce. - page 321

 
Mathemat >>:

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

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

Oui, je suis d'accord. J'ai commencé à écrire et je me suis immédiatement rendu compte que le long terme allait tout simplement déborder.

// Mais je ne m'attends à aucun problème avec la pile à 30 (ou même 300) chiffres.

J'ai déjà trouvé une méthode itérative (en une seule boucle), mais... la profondeur de bit pour le produit n'est pas suffisante de toute façon.

 
MetaDriver писал(а) >>

Oui, je suis d'accord. J'ai commencé à écrire et j'ai tout de suite compris que le long débordera tout simplement.

Et vous n'avez pas besoin de récursion, ça pourrait être plus simple, j'ai déjà trouvé un moyen itératif (dans une boucle), mais... la profondeur de bit par produit n'est pas suffisante de toute façon.


Long doit être remplacé par String, aussi idiot que cela puisse paraître.

 
Richie >>:


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

Cela n'a pas l'air trop stupide, il faudra juste réécrire à la main les multiplications et les additions.

C'est bien, mais la vitesse ira dans le sable, et pour les nombres à 30 chiffres, il faudra beaucoup de temps pour compter.

// C'est vrai, c'est toujours un ordre ou deux plus rapide sur mcl5 que sur Wasik :-P

 
Quel est le rapport avec la longueur ? C'est une question de chiffres. Oui, je sais, tu veux tout fourrer dans une seule boucle. Essayez d'extraire le 17e chiffre du côté gauche d'un nombre à 30 chiffres.
Chaque nombre est un tableau ou une chaîne de chiffres. L'augmentation d'un nombre est une tâche de modélisation manuelle.
C'est une longue période de toute façon, le collisionneur fonctionnera plus rapidement :)
 
Conclusion - nous avons besoin d'un algorithme différent, PAS de surenchère. Ou la recherche intelligente.
Par exemple, il est clair que nous devons rechercher uniquement des ensembles de chiffres, et le fait que ces chiffres mis en ligne puissent former un certain nombre pour le problème n'est pas important.
En outre, si la somme des nombres est un nombre premier, elle est ignorée.
Et ainsi de suite.
 
Mathemat >>:
А при чем тут лонг? Тут же исключительно с цифирями работа. Ну да, понимаю, хоцца все в один цикл всунуть. Дык попробуй-ка 17-ю цифру слева у 30-разрядного числа быстро извлечь.

Long avec le produit de 30 nombres en moyenne 5 == 5^30

// ~ == 9.31323E+20 (et la longue correspond à un maximum de 15 décimales)

;)

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

Je pense que la réponse ne peut pas être plus que 1976. Mais les preuves sont encore difficiles à trouver.

 
Un fait tiré du livre de Cohen sur les équations diophantiennes :

Cette représentation de 30 comme une somme de trois cubes n'était pas connue jusqu'à récemment (il s'agit de la première solution trouvée pour le nombre 30 ; la représentation de 30 par trois cubes a longtemps été une hypothèse). Trouvé, bien sûr, sur un ordinateur. L'ordre des chiffres (déjà des cubes) est d'environ 30 chiffres.
Il est peu probable que cela ait été fait par une force brute stupide.
 
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

Pas moyen...
Et voici à quoi ressemble un algorithme en perl :


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

 
admin >>:

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

.....


C'est juste un programmeur.... pas tant que ça.

Je peux le faire en quatre ou cinq lignes dans Wasik.

:)

Raison: