Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
1 / 1 / 0
Регистрация: 04.12.2018
Сообщений: 94

Разложение на простые множители

05.04.2019, 15:35. Показов 3141. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите с кодом, нужно что бы числа раскладывались на простые множители а не вычислялось простое число!

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Sub lb8()
Dim r, c, k, cc, Arr(), n, a As Variant
 
    r = ActiveCell.Row
    c = ActiveCell.Column
 
Do
   a = Val(InputBox("a = "))
   If a = 0 Then Exit Do
   n = n + 1
   ReDim Preserve Arr(1 To n)
   Arr(n) = a
Loop
 
    For Each k In Arr
        Cells(r, c).Value = k
        cc = c + 1
        
        For j& = 2 To k \ 2 + 1
        
            If (rnm(j&)) And (k Mod j& = 0) Then
               Cells(r, cc).Value = j&
               cc = cc + 1
            End If
            
        Next j&
        r = r + 1
    Next
End Sub
 
Function rnm(n As Long) As Boolean
     If n = 2 Then
        rnm = True
     Else
        If n Mod 2 = 0 Then
           rnm = False
        Else
         rnm = True
           For i& = 3 To Sqr(n) Step 2
               If n Mod i& = 0 Then
                rnm = False
                  Exit For
               End If
           Next i&
        End If
    End If
End Function
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.04.2019, 15:35
Ответы с готовыми решениями:

Разложение введенных чисел на множители!
Помогите написать код к этой задаче! С клавиатуры вводится последовательность натуральных чисел (до первого числа равного нулю). В первый...

[Small Basic] Составить программу разложения натурального числа n на простые множители
Помогите пожалуйста! Составить программу разложения натурального числа n на простые множители. На языке Small Basic Или же...

Разложение на простые множители
Требуется разложить целое число N на простые множители и вывести результат в порядке возрастания. Входные данные Программе дано...

12
3947 / 2340 / 790
Регистрация: 02.11.2012
Сообщений: 6,220
05.04.2019, 15:53
в предыдущей теме код от m-ch (сообщение 6), вам не подходит?
0
1 / 1 / 0
Регистрация: 04.12.2018
Сообщений: 94
05.04.2019, 22:56  [ТС]
Я помню тот код, он отлично справляется со своей задачей, но он НЕ через функцию, а мне нужно через функцию.
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
06.04.2019, 00:07
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
Option Explicit
 
Sub start()
    Dim n, result, i&, s$
    
    n = InputBox("Введите целое число")
    If IsNumeric(n) Then
        result = RazlozhenieNaMnozhiteli(Abs(Fix(n)))
        s = "Множители числа " & n & ":"
        For i = 0 To UBound(result)
            s = s & vbLf & result(i)
        Next
        MsgBox s
    End If
    
End Sub
 
 
Function RazlozhenieNaMnozhiteli(ByVal Num As Double)
    Dim p, i&, j&, r()
    p = Primes(Num): j = -1
    
 
    For i = UBound(p) To 0 Step -1
 
        If Num Mod p(i) = 0 Then
            Do
                Num = Num / p(i)
                j = j + 1
                ReDim Preserve r(j): r(j) = p(i)
            Loop While Num Mod p(i) = 0 And i > 1
        End If
    Next
 
    RazlozhenieNaMnozhiteli = r
    
End Function
 
Function Primes(ByVal max&) As Long()
    Dim i&, ii&, n&
    
    If max > 1 Then
    ElseIf max = 1 Then
        ReDim ll&(0): ll(0) = 1: Primes = ll: Exit Function
    Else: Exit Function
    End If
 
    ReDim b(max) As Byte, ll&(Fix(max / Log(max) * 2))
    n = 1
    ll(0) = n: ll(n) = 2
    For i = 3 To Fix(Sqr(max)) Step 2
        If Not b(i) Then
            n = n + 1: ll(n) = i
            For ii = i * i To max Step i + i: b(ii) = True: Next
        End If
    Next i
    For i = i To max Step 2
        If Not b(i) Then n = n + 1: ll(n) = i
    Next i
    ReDim Preserve ll&(n): Primes = ll
End Function
0
1 / 1 / 0
Регистрация: 04.12.2018
Сообщений: 94
07.04.2019, 07:27  [ТС]
Нужна функция к этой программе, которая будет раскладывать введенные(до 0) значения на простые множители на рабочем листе() примерно вот так: 343 = 7 7 7, первую часть удалось сделать, а вот со второй не могу разобраться.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub lb8()
Dim r, c, k, cc, Arr(), n, a As Variant
 
    r = ActiveCell.Row
    c = ActiveCell.Column
 
Do
   a = Val(InputBox("a = "))
   If a = 0 Then Exit Do
   n = n + 1
   ReDim Preserve Arr(1 To n)
   Arr(n) = a
Loop
 
.......
 
End Sub
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
07.04.2019, 07:47
Олег_313,
Уже сделали замечание по поводу нарушения правил
Зачем плодить дубли?
Разложение на простые множители
Разложение введенных чисел на простые множители
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
07.04.2019, 09:35
Для того чтобы разложить число на простые множители, нужен список простых чисел иначе как ты будешь определять простой это множитель или нет к примеру 50 - будет 5,5,2,1 - полностью состоящее из простых множителей
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
07.04.2019, 09:39
А чем тебя эта тема не устроила
Зачем флудишь ? Тебе ответили ? Ты ответ получил ?
Может еще где-то спросишь ? -(из за тебя кстати я по ошибке влепил -33 хорошему человеку, позже надеюсь устранить недоразумение ) а тебе-бы -333 не мешало бы влепить
0
1 / 1 / 0
Регистрация: 04.12.2018
Сообщений: 94
07.04.2019, 10:43  [ТС]
К каждой ячейке, нужно применить функцию, что-то у меня не получается, проверьте код(в коде пробую применить функцию только к одной ячейке)
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Sub lb8()
Dim r, c, k, cc, Arr(), n, a As Variant
  
       r = ActiveCell.Row
       c = ActiveCell.Column
 
 Do
       a = Val(InputBox("a = "))
       If a = 0 Then Exit Do
       n = n + 1
       ReDim Preserve Arr(1 To n)
       Arr(n) = a
 Loop
 
 For Each k In Arr
        Cells(r, c).Value = k
        cc = c + 1
        For j& = 2 To k \ 2 + 1
        Next j&
        r = r + 1
 Next
 
  Cells(1, 2) = Application.WorksheetFunction.UDF_MNOJITELI(A1)
 
 
End Sub
Function UDF_MNOJITELI(chislo)
    Dim i As Integer, del As String
    i = 2
    While chislo > 1
        While chislo Mod i = 0
            del = del & "*" & i
            chislo = chislo / i
        Wend
        i = i + 1
    Wend
    UDF_MNOJITELI = Mid(del, 2)
End Function
0
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
07.04.2019, 11:25
Олег_313, если функция ваша, то причем здесь Application.WorksheetFunction. просто UDF_MNOJITELI(A1)
И что такое А1, Если переменная, то такой я не увидел, а раз она не присвоена, то её значение 0. Если это ячейка листа, то надо её в квадратные скобочки.
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
07.04.2019, 11:46
Нужно просто перечислить ячейки циклом и присвоить например так: Cells(i, 2) = UDF_MNOJITELI([a1])
0
1 / 1 / 0
Регистрация: 04.12.2018
Сообщений: 94
07.04.2019, 12:34  [ТС]
Спасибо за ответы)
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,934
Записей в блоге: 4
07.04.2019, 13:56
пример на разный тип входного числа(простое, составное, степень двойки)
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Sub mm2()
start2 6 * 31 + 1
start2 6 * 31 - 1
start2 6 * 31
start2 6 * 37 + 1
start2 6 * 37 - 1
start2 6 * 37
start2 2 ^ 10
''Множители числа 187:1 11 17
''Множители числа 185:1 5 37
''Множители числа 186:1 2 3 31
''Множители числа 223:1 223
''Множители числа 221:1 13 17
''Множители числа 222:1 2 3 37
''Множители числа 1024:1 2 2 2 2 2 2 2 2 2 2
End Sub
Sub start2(npar)
Dim n, s$, k1, k1k
n = npar
If IsNumeric(n) Then
    n = Abs(Fix(n))
    s = "Множители числа " & n & ":1"
    k1k = Sqr(n)
    k1 = 2
    Do While k1 < k1k
        If n Mod k1 = 0 Then
        s = s & " " & k1
        n = n / k1
        Else
        k1 = k1 + 1
        End If
    Loop
    Debug.Print s; IIf(n = 1, "", n)
End If
End Sub
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.04.2019, 13:56
Помогаю со студенческими работами здесь

Разложение на простые множители!!!
Кто нить откликнитесь как разложить число на простые множители???? Мне вот че посоветовали но говорят что не так!! { int n,m,i,t,p; ...

Разложение на простые множители
Требуется вывести представление целого числа N в виде произведения простых чисел. Входные данные Входной файл INPUT.TXT содержит...

Разложение на простые множители*
Всем привет. Поможете с задачой только использвав &lt;iostream&gt; Задано натуральное число &gt;= 2 . Разложить его на простые множители ...

Разложение на простые множители*
Привет всем, помогите решить, если можно с комментариями что и как, буду очень благодарен, а то у нас курс как-то слишком быстро вперед...

Разложение на простые множители
Здравствуйте! Ниже представлена программа для разложения данного натурального числа на простые множители. Например, для числа 200...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru