Вот как Project Euler Problem # 76 звучит так: «Сколько разных способов можно записать сто как сумму не менее двух натуральных чисел?»
У меня естьизо всех сил пытался сделать это правильно в течение нескольких дней, пытался решить по-разному и получил в основном те же результаты для небольших чисел (те, которые легко проверить).Я закончил с алгоритмом, который перечисляет все разделы для данного числа в алфавитном порядке, по убыванию (начиная с «N-1 + 1»).Написано в VB.NET:
Dim ub As Integer = 6
Dim wayCount As Integer = 0
For n = ub - 1 To 1 Step -1
'init value array (first combination)
Dim s As New List(Of Integer)
For m = 1 To ub \ n : s.Add(n) : Next
Dim b As Integer = ub Mod n
If b <> 0 Then s.Add(b)
'from where to start decrementing
Dim k As Integer = s.Count - 1
While k > 0 And s(k) = 1 : k -= 1 : End While
Do
wayCount += 1 : Console.WriteLine(String.Join(" + ", s) & " = " & s.Sum)
If s(k) = 1 Then k -= 1
If k = -1 Then Exit Do
s(k) -= 1
s.Add(1)
Loop While k >= 1
Next
Console.WriteLine("count=" & wayCount)
Код работает для чисел 1-6 включительно и начинает давать сбой при N = 7, при пропущенной 1 комбинации.Для N = 8 он пропускает 2 (19 вместо 21).Для N = 100 ответ 4576, что на несколько порядков меньше, чем требуется.Очевидно, я упускаю некоторые очень важные детали.
Если у вас нет времени или средств для компиляции и запуска приведенного выше кода, вот вывод (N = 7):
6 + 1 = 7
5 + 2 = 7
5 + 1 + 1 = 7
4 + 3 = 7
4 + 2 + 1 = 7
4 + 1 + 1 + 1 = 7
3 + 3 + 1 = 7
3 + 2 + 1 + 1 = 7
3 + 1 + 1 + 1 + 1 = 7
2 + 2 + 2 + 1 = 7
2 + 2 + 1 + 1 + 1 = 7
2 + 1 + 1 + 1 + 1 + 1 = 7
1 + 1 + 1 + 1 + 1 + 1 + 1 = 7
count=13
Я изучил эти ссылки:
(ProjectEuler) Суммарные комбинации - предоставляет математическое решение, в котором не перечислены все комбинации
Создание разделовчисла - в языке Python, который я не могу прочитать / запустить / понять.
Любая помощь будет высоко ценится, заранее спасибо!