[アーカイブ!】純粋数学、物理学、化学など:トレードとは一切関係ない脳トレ問題集 - ページ 321

 
Mathemat >>:

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

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

はい、そうですね。書き始めてすぐに、長いと単純に溢れることに気がついた。

// しかし、30桁(あるいは300桁)でもスタックに問題はないと思われます。

すでに反復的(1ループで)な方法を見つけたのですが・・・とにかく積のビットサイズが足りません。

 
MetaDriver писал(а)>>

はい、そうですね。書き始めてすぐに、長いと単純に溢れるということを理解しました。

また、再帰は必要ありません。もっとシンプルに、反復(1ループで)する方法をすでに見つけていますが、...とにかく積ごとのビット深度が足りません。


Longは、バカバカしいですが、Stringに変更すべきです。

 
Richie >>:


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

掛け算と足し算だけは手書きで書き直さなければならないので、あまりバカバカしいとは思いません。

いいんだけど、スピードが砂になっちゃうし、30桁の数字だと数えるのに時間がかかるんだよね。

// 確かに、Wasikよりmcl5の方が1〜2桁速いです :-P

 
ロングと関係あるのか?数字が大事なんです。そうですね、1つのループにすべてを詰め込みたいんでしょう。30桁の数字の左側から17桁目を抜き出してみてください。
各数字は、配列または数字の文字列です。数字を増やすのは、手作業によるモデリング作業です。
とにかく時間がかかるので、コライダーはもっと速く動くでしょう :)
 
結論 - やりすぎではなく、別のアルゴリズムが必要です。あるいはインテリジェント・サーチ。
例えば、数字の集合だけを検索すればよいことは明らかであり、これらの数字を並べることで問題に応じた何らかの数字が形成されることは重要でない。
さらに-数の和が素数である場合は-をスキップする。
といった具合に。
 
Mathemat >>:
А при чем тут лонг? Тут же исключительно с цифирями работа. Ну да, понимаю, хоцца все в один цикл всунуть. Дык попробуй-ка 17-ю цифру слева у 30-разрядного числа быстро извлечь.

30個の数値の積の平均が5であるロング == 5^30

// ~ == 9.31323E+20 (そして、ロングは最大で小数点以下15桁に収まる)

;)

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

答えは1976年以上ではありえないと思う。しかし、その根拠はまだ難しい。

 
コーエンのディオファントス方程式の本から一つの事実を。

このように、30を3つの立方体の和で表すことは、最近まで知られていなかった(30という数については、これが最初の 解であり、30を3つの立方体で表すことは長い間仮説であった)。もちろん、パソコンで発見。数字の順番(すでにキューブ)は、ちょうど30桁くらいです。
間抜けなブルートフォースで行われたとは考えにくい。
 
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

まさか...。
そして、perlのアルゴリズムはこんな感じです。


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

 
admin >>:

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

.....


彼はただのプログラマーですから...。そうでもない

ワシクで4、5行でできるんです。

:)