[Archives] Mathématiques pures, physique, chimie, etc. : problèmes d'entraînement cérébral sans rapport avec le commerce. - page 321
![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Вариантов нет. Для 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.
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.
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
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 :)
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.
А при чем тут лонг? Тут же исключительно с цифирями работа. Ну да, понимаю, хоцца все в один цикл всунуть. Дык попробуй-ка 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)
;)
Вожусь немножко с №226.
Вьехал, что точки лежат не только на окружностях с центром в точке == центру многоугольника,
но и на наборе окружностей "половинного" диаметра прижатых к краям 1976-угольника.
Это легко понять, если представить себе место середин точек всех хорд пересекающих окружность одним из своих концов в фиксированной точке.
Возможно на этих окружностях лежат ещё какие-то "полуточки". (с) Т.е. ответ будет возможно больше чем очевидный минимум (1976).
Думаю дальше.
// Кстати, 1976 == 2*2*2*13*19
// Не знаю поможет ли это делу. Но во внимание принимаю. :)
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.
Вот сама программка:
-
'Объява
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);
}
Ни фига себе..
А вот как выглядит алгоритм на perl:
.....
C'est juste un programmeur.... pas tant que ça.
Je peux le faire en quatre ou cinq lignes dans Wasik.
:)