Страницы: 1
RSS
Лото 7 из 34 и количество комбинаций с простыми числами
 
Добрый день! Требуется помощь.
Есть лото 7 из 34 (5 379 616 комбинаций)
Также имеются простые числа (1, 2, 3, 5, 7, 11, 17, 19, 23, 29, 31)

Задача:
Узнать количество комбинацый которые содержать 1 простое число,2 ,3 ,4 ,5 ,6 и 7 простых чисел и также если нет ни одного простого числа.

Файл excel со всеми комбинациями выложить немогу так как весит более 100мб.
Есть макрос для всех комбинаций ))))
Код
Sub MyCombin()
    Dim a&(), i&, j&, m&, n&, p&, nRows&, rws&, clm&, nCombin&
    n = Val(InputBox("n =", , 10))
    m = Val(InputBox("m =", , 3))
    If n < m Or m < 1 Then Exit Sub
     
    nRows = Rows.Count 'количество строк на листе
    nCombin = WorksheetFunction.Combin(n, m) 'количество возможных сочетаний
 
    ReDim a&(1 To m), b&(1 To IIf(nCombin > nRows, nRows, nCombin), 1 To m)
    For i = 1 To m: a(i) = i: Next i
    If m = n Then p = 1 Else p = m
    Cells.ClearContents
 
    Do
        j = j + 1
        For i = 1 To m: b(j, i) = a(i): Next i
         
        If j = nRows Or j + rws = nCombin Then
            [a1].Offset(, clm).Resize(UBound(b), m) = b
            j = 0
            clm = clm + m + 1
            rws = rws + nRows
            If rws < nCombin Then ReDim b&(1 To IIf(nCombin - rws > nRows, nRows, nCombin - rws), 1 To m)
        End If
         
        If a(m) = n Then p = p - 1 Else p = m
        If p Then
            For i = m To p Step -1
                a(i) = a(p) + i - p + 1
            Next i
        End If
    Loop While p
End Sub
Изменено: ElmarB - 05.11.2016 20:09:46
 
Цитата
ElmarB написал: содержать
содержатЪ, в данном случае, пишется с твердым знаком на конце, а не с мягким
 
Цитата
Михаил С. написал:
пишется с твердым знаком на конце, а не с мягким
э, мы уже к дореволюционной орфографии перешли?  :)
Арфы - нет, возьмите бубен.
 
Содержат - глагол; твердые знаки, ЕМНИП, писались только в конце существительных мужского рода.
 
Цитата
ElmarB написал: Также имеются простые числа (1, 2, 3, 5, 7, 11, 17, 19, 23, 29, 31)
Число 1 не является простым, 13 отсутствует

Цитата
ElmarB написал:Узнать количество комбинацый которые содержать 1 простое число,2 ,3 ,4 ,5 ,6 и 7 простых чисел и также если нет ни одного простого числа.
Нужно только посчитать количество или определить эти комбинации?
Если только посчитать, то не нужно все комбинации выводить на лист, а сразу считать в макросе, если комбинации уже получены, то можно использовать простую формулу (см. вложение)

PS:
Цитата
ElmarB написал: Есть макрос для всех комбинаций ))))
Очень знакомый макрос
Изменено: MCH - 06.11.2016 07:02:48
 
Без вывода комбинаций на лист, просто подсчет:
Код
Sub MyCombin()
    Dim a&(), out&(), i&, j&, m&, n&, p&, prime, x
    n = 34 'Val(InputBox("n =", , 10))
    m = 7 'Val(InputBox("m =", , 3))
    If n < m Or m < 1 Then Exit Sub
 
    ReDim a&(1 To m), out&(0 To m, 1 To 2)
    For i = 1 To m: a(i) = i: out(i, 1) = i: Next i
    If m = n Then p = 1 Else p = m
    prime = Array(2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31)
    Do
        j = 0
        For i = 1 To m
            For Each x In prime
                If a(i) = x Then j = j + 1: Exit For
            Next x
        Next i
        out(j, 2) = out(j, 2) + 1
        If a(m) = n Then p = p - 1 Else p = m
        If p Then
            For i = m To p Step -1
                a(i) = a(p) + i - p + 1
            Next i
        End If
    Loop While p
    [a1].Resize(m + 1, 2) = out
End Sub
 
Цитата
MCH написал: Очень знакомый макрос
У вас позаимствовал.
И большое спасибо за помощь!
 
Цитата
Файл excel со всеми комбинациями выложить немогу так как весит более 100мб
а для чего он нужен?
достаточно умножить разделить 6 факториалов
Код
=ФАКТР(простых)/ФАКТР(простых-RC[-1])/ФАКТР(RC[-1])*ФАКТР(неПрост)/ФАКТР(неПрост-вКомб.+RC[-1])/ФАКТР(вКомб.-RC[-1])
в итоге получилось:
11 110 417
21 850 695
31 461 075
4584 430
5116 886
610 626
7330
см.вложение
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:
достаточно умножить разделить 6 факториалов
можно и без факториалов:
Код
=ЧИСЛКОМБ(простых;A7)*ЧИСЛКОМБ(неПрост;вКомб.-A7)
Страницы: 1
Читают тему
Наверх