汇编语言-求所有的素因子

求给定整数的所有素因子


1. 题目:求给定整数的所有素因子

2. 要求:输入一个整数,求出其所有素因子,并表现为乘积方式,求因子的算法用子程序来实现。例如,输入480,输出480=2*2*2*2*2*3*5

C++代码如下


 1 //The program is to find all the prime factors of a number
2 //Author:Karllen
3 //Date: 05/22/2014
4 #include <iostream>
5
6 void findPfactor(int n); // Find the factor belongs to prime
7 int main(void)
8 {
9 int n;
10 std::cin>>n;
11 findPfactor(n);
12 system("pause");
13 return 0;
14 }
15
16 void findPfactor(int n)
17 {
18 int i = 2;
19 while (i<n)
20 {
21 while (n%i==0) //The i is a factor of n
22 {
23 n = n/i;
24 std::cout<<i;
25 std::cout<<‘*‘;
26 }
27 ++i;
28 }
29 std::cout<<n<<std::endl;
30 }

汇编代码如下:


  1 ; Example assembly language program
2 ; Author: Karllen
3 ; Date: revised 05/2014
4
5 .386
6 .MODEL FLAT
7
8 ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD
9
10 INCLUDE io.h ; header file for input/output
11
12 cr EQU 0dh ; carriage return character
13 Lf EQU 0ah ; line feed
14
15 .STACK 4096 ; reserve 4096-byte stack
16
17 .DATA ; reserve storage for data
18 flai DWORD ?
19 temp DWORD ?
20 crlf BYTE "*",0
21 eqll BYTE "=",0
22 prompt BYTE "Enter a number to find all the prime factors",cr,Lf,0
23 fl DWORD ?
24 value BYTE 11 DUP(?),0
25 char BYTE 1 DUP(?)
26
27 PUBLIC _start
28 .CODE ; start of main program code
29 _start:
30 output prompt
31 input value,11
32 atod value
33 push eax
34 call byteInput
35 add esp,4
36
37 output eqll
38
39 push eax
40 call findPfactor
41 add esp,4
42
43 INVOKE ExitProcess, 0 ; exit with return code 0
44
45
46 findPfactor PROC NEAR32 ;find the prime of factor
47 push ebp
48 mov ebp,esp
49
50 mov eax,[ebp+8]
51 mov flai,eax
52 mov ecx,2
53 mov ebx,ecx
54 doFind:
55 mov ecx,ebx
56 cmp ecx,flai
57 je endFind
58 doFactor:
59 mov temp,eax
60 cdq
61 idiv ecx
62 ;eax = eax/ecx
63 cmp edx,0
64 jne endFactor
65 ;dtoa value,ecx
66 ;output value
67 push ecx
68 call byteInput
69 add esp,4
70 output crlf
71
72 jmp doFactor
73 endFactor:
74 mov eax,temp
75 inc ebx
76 jmp doFind
77 endFind:
78 pop ebp
79 ret
80
81 findPfactor ENDP
82
83 byteInput PROC NEAR32
84 push ebp
85 mov ebp,esp
86
87 push ebx
88 push eax
89 push edx
90
91 mov fl,0
92 mov ebx,10
93 mov eax,[ebp+8]
94 doWh:
95 cdq
96 idiv ebx
97 push edx
98 inc fl
99 cmp eax,0
100 je enddoWh
101
102
103 jmp doWh
104 enddoWh:
105
106 doPrint:
107
108 cmp fl,0
109 je enddoPrint
110 dec fl
111 pop edx
112 mov char,dl
113 add char,‘0‘
114 output char
115 jmp doPrint
116 enddoPrint:
117 pop edx
118 pop eax
119 pop ebx
120 pop ebp
121 ret
122
123 byteInput ENDP
124
125 END ; end of source code

测试结果:

时间: 2024-11-10 08:06:29

汇编语言-求所有的素因子的相关文章

汇编语言-求毕达哥拉斯三角形的边

1. 题目:给定一条最长边,求所有可能的毕达哥拉斯三角形. 2. 实验要求:一个毕达哥拉斯三角形的三条边是由三个正整数A.B和C组成,从而A2+B2=C2.例如,数字3.4.5,由于9+16=25,而形成一个毕达哥拉斯三角形.写一段完整的汇编程序,实现输入一个值给C,然后显示值为C时,所有可能的毕达哥拉斯三角形.例如,如果输入5作为C的值,那么输出可以是: A              B              C 3                    4                

汇编语言-求分段函数值

计算函数值 题目:计算给定函数值 要求:编制程序,计算下面函数值 其中,从键盘输入x,y,输出数据为a. 输入输出时候都要求有提示信息. 考查知识点:分支结构的应用. 代码如下: 1 ; Example assembly language program -- 2 ; Author: karllen 3 ; Date: revised 5/2014 4 5 .386 6 .MODEL FLAT 7 8 ExitProcess PROTO NEAR32 stdcall, dwExitCode:DW

汇编语言-求X的阶乘

1. 题目:求X的阶乘值 2. 要求:输入一个整型数(不超过10),求出其阶乘值后输出,求阶乘的算法用子程序来实现. 3. 提示:可以用递归来实现,也可以用简单的循环来实现. 这里使用循环来实现: 对于汇编新手,最好通过高级语言的编程测试,然后再写汇编代码,这样效果会好一些. 求阶乘的C++代码如下: 1 //The program is to find the factorial from 1 to 10 2 //author:Karllen 3 //Date: 05/21/2014 4 5

欧拉计划003. 最大素因子

Problem 3: Largest prime factor The prime factors of 13195 are 5, 7, 13 and 29. What is the largest prime factor of the number 600851475143 ? 求出最大素因子 我的python代码如下: num=600851475143 div=2 while div<=num: if num%div==0: num=num/div else: div=div+1 prin

RGCDQ(线段树+数论)

题意:求n和m之间的所有数的素因子个数的最大gcd值. 分析:这题好恶心,看着就是一颗线段树,但本题有一定的规律,我也是后来才发现,我还没推出这个规律,就不说了,就用纯线段树解答吧.因为个点数都小于1000000所以素因子个数不会超过7个所以建一个线段树,最下面一层是每个节点的素因子个数为1,2,3,4,5,6,7的有多少个,父节点求和,最终查询的是n到m之间有多少个1,2,3,4,5,6,7然后存在就求一下gcd着最大就好了 本题最重要的时间和空间,显然线段数中的点不会很大,所以采用short

hacker cup 2015 Round 1 解题报告

A:求区间内素因子个数等于n的数有多少个 解题思路:筛法 解题代码: 1 // File Name: a.cpp 2 // Author: darkdream 3 // Created Time: 2015年01月18日 星期日 13时54分20秒 4 5 #include<vector> 6 #include<list> 7 #include<map> 8 #include<set> 9 #include<deque> 10 #include&

UVA - 884 Factorial Factors

题目: 这个题目,我先开始尝试直接求出每个素因子的次数,然后全部加起来. 代码: #include<iostream> using namespace std; int degree_in_fact(int m, int p) { if (m)return degree_in_fact(m / p, p) + m / p; return 0; } bool isprime(int n) { if (n == 2)return true; if (n % 2 == 0)return false;

Nearly prime numbers - SGU 113(素数)

题目大意:判断一个数是否是两个素数的乘积,如果是,输出Yes,否则No. 分析:先打表求出来一部分素因子,用素数对素数判定还是比较快的. 代码如下: =============================================================================================================================== #include<stdio.h> #include<algorithm> #i

poj 1845 Sumdiv (同余定理,快速幂取余)

链接:poj 1845 题意:求A^B的所有因子的和对9901取余后的值 如:2^3=8,8的因子有 1,2,4,8,所有和为15,取余后也是15 应用定理主要有三个: (1)整数的唯一分解定理: 任意正整数都有且只有一种方式写出其素因子的乘积表达式. A=(p1^k1)*(p2^k2)*(p3^k3)*....*(pn^kn)   其中pi均为素数 (2)约数和公式: 对于已经分解的整数A=(p1^k1)*(p2^k2)*(p3^k3)*....*(pn^kn) 有A的所有因子之和为 S =