[存档!]纯数学、物理学、化学等:与贸易没有任何关系的大脑训练问题 - 页 321

 
Mathemat >>:

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

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

是的,我同意。开始写的时候,马上意识到,长的会直接溢出来。

// 但我不指望堆栈在30(甚至300)位时有任何问题。

我已经找到了一个迭代(在一个循环中)的方法,但是......反正产品的比特大小是不够的。

 
MetaDriver писал(а)>>

是的,我同意。我开始写作,并立即明白,长的会直接溢出来。

而且你不需要递归,它可以更简单,我已经找到了一个迭代(在一个循环中)的方法,但是......反正每个产品的位深度是不够的。


Long应该改成String,虽然听起来很傻。

 
Richie >>:


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

这听起来并不太愚蠢,只是乘法和加法要用手重写。

这很好,但速度会在沙子里走,对于30位数的数字,它需要很长的时间来计数。

// 是的,在mcl5上比在Wasik上还是要快一两个等级。

 
这与长有什么关系?这都是关于数字的。是的,我知道,你想在一个循环中完成所有工作。试着从一个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作为三个立方体之和的这种表示方法直到最近才被人知道(这是第一次 发现30这个数字的解决方案;30由三个立方体表示一直是一种假设)。当然,是在电脑上找到的。数字的顺序(已经是立方体)只是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:

.....


他只是一个程序员....一般般。

我可以在Wasik中用四或五行来做。

:)