文档库 最新最全的文档下载
当前位置:文档库 › 汇编程序实例素数输出

汇编程序实例素数输出

汇编程序实例素数输出
汇编程序实例素数输出

a d

b ?

b db ?

d db 10

mes0 db 'Input the number:',0ah,0dh,'$'

mes1 db 0ah,0dh,'the prime number small than the number of ','$' mes2 db 'is:',0ah,0dh,'$'

data ends

stack segment

dw 100(?)

stack ends

code segment

assume cs:code,ds:data

mainproc far

start:

mov ax,data

mov ds,ax

lea dx,mes0

mov ah,9

int 21h

mov a,0

shuru:

mov ah,01h

int 21h

cmp al,0dh

jz ok

sub al,30h

mov b,al

mov al,a

mul d

add al,b

mov a,al

jmp shuru

ok:

lea dx,mes1

mov ah,9

int 21h

mov bl,a

call shuchu

lea dx,mes2

mov ah,9

int 21h

xunhuan:

call panduan

inc bl

cmp bl,a

jng xunhuan

mov ah,1

int 21h

ret mainendp

panduan proc near

mov ah,0

mov al,bl

mov b,2

jmp yunsuan yunsuan:

cmp al,b

jz shuchu0

div b

cmp ah,0

jz shuchu1

inc b

mov ah,0

mov al,bl

jmp yunsuan shuchu0:

call shuchu shuchu1:

ret panduan endp

shuchu proc near

mov ah,0

mov al,bl

mov cx,0 op:

inc cx

div d

add ah,30h

mov dl,ah

mov dh,0

push dx

mov ah,0

cmp ax,0

jnz op

ol: pop dx

;mov dx,bx

mov ah,02

int 21h

loop ol

mov dl,' '

int 21h

ret

shuchu endp code ends

end start

判断某个数是否素数

判断某个数是否素数: 1.定义为一个function函数过程 第一种方法: Function prime(ByVal x As Integer) As Boolean 注1 For i = 2 To x – 1 注2 If x Mod i = 0 Then Exit For Next i If i > x - 1 Then prime = True 注3 End Function 注1:这里注意形参前面有ByVal,不要ByVal也是可以的,为什么? 因为在function中并未改变x的值,所以加不加ByVal都正确 注2:此句也可以这样写:For i = 2 To x/2 或 For i = 2 To sqr(x) 注3:此句也可以这样写:If i > x - 1 Then prime = True Else prime = False 思考:为什么不要Else prime = False 程序运行也是正确的 另外注意此处的条件i > x – 1的实际含义 调用的时候(调用函数时,最好不要用带call关键字的调用方法) If prime(x) then……… 第二种方法: Function prime(ByVal x As Integer) As Boolean Prime=false 注1 For i = 2 To x – 1 If x Mod i = 0 Then Exit Function注2 Next i prime = True 注3 End Function 注1 此句要不要都可以,思考为什么 注2和注3两条语句与第一种方法的区别 调用的时候 If prime(x) then……… 第三种方法: Function prime(ByVal x As Integer) As integer Prime=0 For i = 2 To x – 1 If x Mod i = 0 Then Exit Function Next i prime = 1 End Function 此方法与上述方法的区别 调用的时候 If prime(x)=1 then………

素数的几种判断方法和实现

PS:本来没有决心把这个东西写完的,结果早上写到一半,出去吃个饭,没保存,回来手一抖直接关掉了,好不容易写了一大半了,只能重新写了,坑爹啊,但就是这个插曲,本来还没有决心的我,一下子却坚定了信念,一点要把这个东西写完。就这样开始吧 BY:Lee 下面,我们重新开始 ═══════════════════════════════════════════ 如何判断一个数是否是素数呢 ═══════════════════════════════════════════也许你会认为这是一个简单的问题,但事实上,世界上任何一个问题,都没有你想象中的那么简单1 + 1 是否等于2 ,这便是一个简单而又复杂的问题,呵呵。 突然想把这个东西换一种风格来写了,就这样扯淡扯下去吧。扯的时候文章中多少有内容来自于网络,没有侵权的意思,如果作者看到还请见谅。 ═══════════════════════════════════════════下面正式进入正题 ═══════════════════════════════════════════ 一、朴素判断素数 ═══════════════════════════════════════════1. 这种方法被誉为笨蛋的做法: 一个数去除以比它的一半还要大的数,一定除不尽的,这还用判断吗?? 很容易发现的,这种方法判断素数,对于一个整数n,需要n-2 次判断,时间复杂度是O(n)在n非常大或者测试量很大的时候,这种笨蛋做法肯定是不可取的。

2. 改进一下下小学生的做法: 3. 再改进一下聪明的小学生的做法 对于一个小于n的整数X,如果n不能整除X,则n必定不能整除n/X。反之相同一个明显的优化,就是只要从2枚举到√n 即可。 因为在判断2的同时也判断了n/2。到√n时就把2到n-1都判断过了。 在这里,这个聪明的小学生还用了i*i <= n 来代替sqrt(n), 这里是避免了调用函数sqrt(),其消耗时间很大, 特别是在大量数据测试的时候消耗很明显。 这个算法的时间复杂度,与最前面的笨蛋做法就好多了, 不过这里好像用sqrt()也没问题啊,,,,这个就不太清楚了。 但是做一个测试发现,如果是这样额话,每一次判断都要计算i*i,

素数判断程序测试范例

问题描述:键盘输入m和n(10 #include using namespace std; int main() { int m,n,i; static int k=0; cout<<"输入m,m(其中10>m>>n; while(m<=10||m>=n||n>2000) { cout<<"输入数据有误,请再次输入:"<>m>>n; } for(i=m;i<=n;i++) { int x=(int)sqrt((double)i); for(int j=2;j<=x;j++) { if(i%j==0) { break; } else if(j==x) { cout<

一.控制流测试1、控制流图如下:

2、根据以上控制流图: 因为控制流的1-2-3-2部分为用户输入的m,n的重复赋值过程,与输入数据密切相关且每次取值不同,关系到控制流测试,所以将此独立出来:以为节点“2”的复合谓词为或的关系,全为false时只有一种情况,而为true 时有7种情况,对“2”的复合谓词(m<=10||m>=n||n>2000)为真假时其表1如下: 设A:m<=10; B:m>=n; C:n>2000 但是对于节点“2”的情况,并非所有可能都会取到,因为当A为真时,就不会执行B,依此,生成下表2: 根据表2,得出此部分的取值及路径为:

判断一个数是质数还是合数的方法

判断一个数是质数还是合数的方法 单位:平川区黄峤教管中心双铺中心小学张彦娟 一、质数和合数的意义: 质数:一个数只有1和它本身两个因数,这个数叫作质数。(除2以外所有的质数都是奇数。) 备注: 1、最小的质数是2。 2、既是偶数又是质数的数是2。 3、两个质数相乘的积一定是合数。 合数:一个数除了1和它本身以外还有其他的因数,这个数叫作合数。 备注: 1、最小的合数是4。 2、最大的一位合数是9。 3、1既不是质数,也不是合数。 二、判断一个数是质数还是合数有两种方法: 方法一:⑴判断一个数是质数还是合数需要看这个数的因数的个数,只有2个因数的数一定是质数,有3个或3个以上因数的数是合数。 ⑵个位上是0,2,4,6,8和5的数(除了0,2和5)一定不是质数,质数个位上的数字只能是1,3,7和9。 方法二:判断一个自然数是不是质数,可以用所有比它小的质数

从小到大依次去除它,除到商比除数小,而且还有余数,它就是质数,否则不是质数。 三、问题解析: 下面哪些数是合数?哪些数是质数? 2 25 9 21 31 91 57 42 1、方法解析:因为除了1和它本身以外还有其他的因数的数是合数,所以先根据“2,5和3的倍数特征”来判断这些数除了1和它本身两个因数以外是否有因数2,5,3,如果有就为合数。 2和42有因数2,但2只有1和2两个因数,所以2是质数,42是合数。9,21,57有因数3,它们都是合数。25有因数5,也是合数。91有因数7,是合数。只有31除了1和它本身之外再没有其他的因数,所以31是质数。 2、解答:25,9,21,91,57,42是合数,2,31是质数。 四、100以内的质数: 100以内的质数有:2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,共25个。

c++,判断一个整数是否为素数用函数完成

实验七 一、实验内容 教材3.5 设计函数digit(num,k),返回整数num从右边开始的第k位数字的值。例如:digit(4647,3)=6 digit(23523,7)=0 教材3.7 歌德巴赫猜想指出:任何一个充分大的偶数都可以表示为两个素数和。 例如:4=2+2 6=3+3 8=3+5 … … 50=3+47将4.50之间的所有偶数用两 个素数之和表示。判断一个整数是否为素数用函数完成。 教程例3 设计一个简单的计算器程序,从键盘输入“+3 5”代表表达式“3+5”,程序读入运算符和数据,调用Calculate()函数,根据运算符进行加、 减、乘、除四则运算。要求能反复执行这一过程,直到用户输入“#” 符号作为运算符为止。 二、实验目的 1、掌握函数的定义调用方法。 2、掌握函数参数的传递(传值)、形参与实参的关系以及函数声明。 3、理解局部变量的作用。 三、实验步骤 教材3.5设计函数digit(num,k),返回整数num从右边开始的第k位数字的值。例如:digit(4647,3)=6 digit(23523,7)=0 教材3.7 歌德巴赫猜想指出:任何一个充分大的偶数都可以表示为两个素数和。 例如:4=2+2 6=3+3 8=3+5 … … 50=3+47将4-50之间的所有偶数用两 个素数之和表示。判断一个整数是否为素数用函数完成。 教程例3 设计一个简单的计算器程序,从键盘输入“+3 5”代表表达式“3+5”,程序读入运算符和数据,调用Calculate()函数,根据运算符进行加、 减、乘、除四则运算。要求能反复执行这一过程,直到用户输入“#” 符号作为运算符为止。 四、实验数据及处理结果 教材3.5 #include using namespace std; int main(){ int k,num,i=0,j,m; int digit[10]; cout<<"请输入正整数:"<<'\t'<<"右边开始第k位"<>num>>k; do{ digit[i]=num%10;

判断一个数是否为素数(c语言)

在C语言中,我们经常会用到判断一个数的性质,今天就以如何判断一个数是否为素数为例来说明思路,希望能够达到触类旁通的效果。 1.直接判断一个数是否为素数,代码如下: /* 目的:判断一个数是否是素数 */ # include int main(void) { int val; int i; scanf("%d",&val); for(i = 2; i < val; i++) // 用2到(val-1)的数去除val { if(val % i == 0) // 判断能否整除 break; } if (i == val) printf("YES!\n"); else printf("No!\n"); } 注:for循环的功能: ①若能整除,通过break跳出函数 ②若一直到val-1都不能整除,此时i再自增1到val,不满足i < val 跳出for循环,这时i = val。

2.通过函数来判断 /* 目的:通过函数判断一个数是否是素数 */ # include bool f(int m) { int i; for(i = 2;i < m; i++) { if(m % i == 0) break; } if(i == m) return true; else return false; } int main(void) { int val; scanf("%d",&val); if (f(val)) //注:此处若写成:if (f(val) == true) 也可以。 printf("YES\n"); else printf("NO\n"); } 对比上述两种方法可见,通过函数来实现比较合适,因为如果要判断的数据过多时,要通过第一种方法实现的话,代码太多,而且也不便于调用,因此推荐使用函数实现此功能。

判断一个数是质数还是合数的方法

单位:平川区黄峤教管中心双铺中心小学张彦娟 一、质数和合数的意义: 质数:一个数只有1和它本身两个因数,这个数叫作质数。(除2以外所有的质数都是奇数。) 备注: 1、最小的质数是2。 2、既是偶数又是质数的数是2。 3、两个质数相乘的积一定是合数。 合数:一个数除了1和它本身以外还有其他的因数,这个数叫作合数。 备注: 1、最小的合数是4。 2、最大的一位合数是9。 3、1既不是质数,也不是合数。 二、判断一个数是质数还是合数有两种方法: 方法一:⑴判断一个数是质数还是合数需要看这个数的因数的个数,只有2个因数的数一定是质数,有3个或3个以上因数的数是合数。 ⑵个位上是0,2,4,6,8和5的数(除了0,2和5)一定不是质数,质数个位上的数字只能是1,3,7和9。 方法二:判断一个自然数是不是质数,可以用所有比它小的质数从小到大依次去除它,除到商比除数小,而且还有余数,它就是质数,

否则不是质数。 三、问题解析: 下面哪些数是合数?哪些数是质数? 2 25 9 21 31 91 57 42 1、方法解析:因为除了1和它本身以外还有其他的因数的数是合数,所以先根据“2,5和3的倍数特征”来判断这些数除了1和它本身两个因数以外是否有因数2,5,3,如果有就为合数。 2和42有因数2,但2只有1和2两个因数,所以2是质数,42是合数。9,21,57有因数3,它们都是合数。25有因数5,也是合数。91有因数7,是合数。只有31除了1和它本身之外再没有其他的因数,所以31是质数。 2、解答:25,9,21,91,57,42是合数,2,31是质数。 四、100以内的质数: 100以内的质数有:2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,共25个。

判断一个数是否为高斯素数Guess_Prime

function Guess_Prime pp=[]; n=10 for a=0:n for b=0:n if a^2+b^2>1 z=a+b*i; [ind fac]=Find_Factor(z); if ind==1 pp=[pp z]; end end end end pp q1=round(abs(pp.^2)); q2=isprime(q1); q3=q1.^(1/2); pos=find(q2==0); pp(pos)

%non_prime=q1(pos) %x=sqrt(non_prime); %x=round(x); %x=sort(x) pos=find(q2==1); is_prime=sort(q1(pos)) function [ind fac]=Find_Factor(z) Nr=abs(z); %模函数 Nr2=(real(z))^2+(imag(z))^2; ind=1;fac=1; if ~isprime(Nr2) for x=0:floor(Nr) for y=0:floor(Nr) if x^2+y^21 w=z/(x+i*y); if is_gauss_integer(w) ind=0; fac=x+i*y;break; end end

end end function ind=is_gauss_integer(z) %判断z 是否是Gauss整数; a=real(z); b=imag(z); eps=10^(-10); if abs(a-round(a))

相关文档
相关文档 最新文档