12 / 27 / 12
Регистрация: 20.09.2013
Сообщений: 600
1
TASM

Проверка простое число или нет

14.12.2016, 00:07. Показов 3086. Ответов 12
Метки нет (Все метки)

Здравствуйте! Подскажите как можно проверить простое число или нет в TASM, хотя бы алгоритм подскажите
По идеи нужно проверить сколько раз делится число без остатка, если 2 то простое, если больше то нет
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.12.2016, 00:07
Ответы с готовыми решениями:

Как проверить - простое число или составное
Доброго времени суток! понять не могу, как проверить простое оно или составное? так и писать:...

Проверка суммы на парность (четное или не четное число)
Доброе время суток. Подскажите, пожалуйста, что я не так написала. В програме надо сумировать все...

Простое число или нет?
Это программа определяет является ли число простым. Дана форма. На ней текстовое поле, в которое...

Простое число или нет
#include <iostream> #include"conio.h" #include"math.h" using namespace std; int main() { ...

12
Модератор
Эксперт по электронике
7712 / 3864 / 1496
Регистрация: 01.02.2015
Сообщений: 11,924
Записей в блоге: 2
14.12.2016, 00:10 2
Да, наверняка, алгоритм не отличается от реализации на любом другом языке, который вы уже успели освоить.
0
12 / 27 / 12
Регистрация: 20.09.2013
Сообщений: 600
14.12.2016, 00:17  [ТС] 3
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Да, наверняка, алгоритм не отличается от реализации на любом другом языке, который вы уже успели освоить.
получается достаточно проверить на 10 чисел, то есть в цикле по делить на числа начиная с 1 до 10
вопрос при делении bx, где будет остаток
и также если я потом проверю остаток больше 0 то значит число не делится на делимое число верно?
0
Модератор
Эксперт по электронике
7712 / 3864 / 1496
Регистрация: 01.02.2015
Сообщений: 11,924
Записей в блоге: 2
14.12.2016, 00:24 4
Лучший ответ Сообщение было отмечено TheSecret как решение

Решение

В общем виде нет. Контраргумент - число 121 - оно составное, но на числа 2..10 не делится.
Нужно проверять частное и делитель. Когда частное меньше делителя - прекращать цикл проверки.

Добавлено через 56 секунд
Вижу знания названий регистров. Жду попыток.

Добавлено через 2 минуты
Я обычно набираю в поисковике "assembler div" - и читаю. Бо там достаточно вариантов для размещения частного и остатка в зависимости от разрядности делителя.
1
12 / 27 / 12
Регистрация: 20.09.2013
Сообщений: 600
14.12.2016, 23:19  [ТС] 5
почитал, разобрался что нужно делить и проверять остаток есть или нет
делить нужно на число -1 и до 3 включительно
но при делении программа напрочь зависает, пробовал идив и див, разницы ноль
Assembler
1
2
3
4
5
6
7
8
9
10
11
mov ax,A
                sub ax,1
                mov del,ax
                sub ax,2
                mov cx,ax
                c2:
                        mov ax,A
                        idiv del
                        mov ax,del
                        dec ax
                        mov del,ax
Добавлено через 2 минуты
пробовал при А=13
когда делитель 12, сразу зависает
0
6679 / 2662 / 366
Регистрация: 17.02.2013
Сообщений: 3,908
14.12.2016, 23:29 6
Прочитай как работает команда idiv.
0
12 / 27 / 12
Регистрация: 20.09.2013
Сообщений: 600
14.12.2016, 23:52  [ТС] 7
Цитата Сообщение от Ethereal Посмотреть сообщение
Прочитай как работает команда idiv.
читал и мне не очень понятно

Добавлено через 22 минуты
точнее если быть не очень понятно где у меня ошибка
0
6679 / 2662 / 366
Регистрация: 17.02.2013
Сообщений: 3,908
15.12.2016, 00:01 8
Что на что делит idiv ? А что на что собираешься поделить ты ?
0
12 / 27 / 12
Регистрация: 20.09.2013
Сообщений: 600
15.12.2016, 00:01  [ТС] 9
Цитата Сообщение от Ethereal Посмотреть сообщение
Что на что делит idiv ? А что на что собираешься поделить ты ?
ax на del
0
6679 / 2662 / 366
Регистрация: 17.02.2013
Сообщений: 3,908
15.12.2016, 00:04 10
idiv делитель_размером_в_слово
делит регистровую пару dx:ax на делитель. Ну и чему у тебя равен dx ?

Добавлено через 1 минуту
Цитата Сообщение от TheSecret Посмотреть сообщение
ax на del
если del размером в байт. А у тебя это не так.
1
12 / 27 / 12
Регистрация: 20.09.2013
Сообщений: 600
15.12.2016, 00:04  [ТС] 11
Цитата Сообщение от Ethereal Посмотреть сообщение
idiv делитель_размером_в_слово
делит регистровую пару dx:ax на делитель. Ну и чему у тебя равен dx ?
очистил дх и все ок
спасибо
0
6679 / 2662 / 366
Регистрация: 17.02.2013
Сообщений: 3,908
15.12.2016, 00:08 12
А зависает программа потому, что если результат деления dx:ax на делитель_размером_в_слово не влезает в слово или производится деление на ноль, то команда idiv выкидывает прерывание 0. Если это прерывание никто не обрабатывает, то комп повесится.

Добавлено через 26 секунд
Цитата Сообщение от TheSecret Посмотреть сообщение
очистил дх и все ок
спасибо
ну и отличненько
0
Модератор
Эксперт по электронике
7712 / 3864 / 1496
Регистрация: 01.02.2015
Сообщений: 11,924
Записей в блоге: 2
15.12.2016, 00:48 13
Вывод простых чисел от 1 до 100 (в обратном порядке)
Assembler
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
.model  small
.stack  100h
.data
        Number          dw      94
 
        MsgIsPrime      db      'Is Prime', '$'
        MsgIsComp       db      'Is Composite', '$'
        MsgCrLf         db      0Dh, 0Ah, '$'
        Space           db      ' ', '$'
.code
 
;Определяет, в ax -  простое число или составное
;вход:
; ax - число для тестов
;выход:
; ax=1 - число простое
; ax=0 - число составное
IsPrime proc
        pushf
        push    bx
        push    cx
        push    dx
 
        cmp     ax,     1
        je      @@@IsComposite
        cmp     ax,     2
        je      @@@IsPrime
        cmp     ax,     3
        je      @@@IsPrime
        test    ax,     1
        jz      @@@IsComposite
 
        mov     bx,     3
@@@While:
        push    ax
        mov     dx,     0
        div     bx
        mov     cx,     ax
        pop     ax
        cmp     dx,     0
        jz      @@@IsComposite
        cmp     cx,     bx
        jb      @@@IsPrime
        add     bx,     2
        jmp     @@@While
 
@@@IsPrime:
        mov     ax,     1
        jmp     @@@ExitProc
@@@IsComposite:
        mov     ax,     0
@@@ExitProc:
        pop     dx
        pop     cx
        pop     bx
        popf
        ret
IsPrime endp
 
; выводит число из регистра AX на экран
; входные данные:
; ax - число для отображения
Show_ax PROC
        push    ax
        push    bx
        push    cx
        push    dx
        push    di
 
        mov     cx, 10
        xor     di, di          ; di - кол. цифр в числе
 
        ; если число в ax отрицательное, то
        ;1) напечатать '-'
        ;2) сделать ax положительным
        or      ax, ax
        jns     @@Conv
        push    ax
        mov     dx, '-'
        mov     ah, 2           ; ah - функция вывода символа на экран
        int     21h
        pop     ax
 
        neg     ax
 
@@Conv:
        xor     dx, dx
        div     cx              ; dl = num mod 10
        add     dl, '0'         ; перевод в символьный формат
        inc     di
        push    dx              ; складываем в стэк
        or      ax, ax
        jnz     @@Conv
        ; выводим из стэка на экран
@@Show:
        pop     dx              ; dl = очередной символ
        mov     ah, 2           ; ah - функция вывода символа на экран
        int     21h
        dec     di              ; повторяем пока di<>0
        jnz     @@Show
 
        pop     di
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        ret
Show_ax ENDP
 
main    proc
        mov     ax,     @data
        mov     ds,     ax
        ;------------------------------------
        mov     cx,     100
@@For:
        mov     ax,     cx
        call    IsPrime
        cmp     ax,     0
        jz      @@Skip
        mov     ax,     cx
        call    Show_ax
        mov     ah,     9
        lea     dx,     Space
        int     21h
@@Skip:
        loop    @@For
        ;------------------------------------
        mov     ax,     4C00h
        int     21h
main    endp
 
end     main
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.12.2016, 00:48

Число простое или составное - проверка
Помогите, пожалуйста, студентке! Программа должна проверять, простое число ввел пользователь, или...

Определить, простое число или нет
Дано натуральное число n&gt;1. Проверьте, является ли оно простым. Программа должна вывести слово YES,...

Определить, простое число или нет
Программа должна говорить простое число или нет. Подскажите в чем ошибка кто знает. #include...

Определить простое число или нет
Нужна помощь. Как написать программу что бы она определяла какое число вводишь простое или нет.


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.