主题:求因子
soulcontrol
[专家分:0] 发布于 2005-12-04 10:05:00
给出一个整数,求它的因子,并按下面的格式打印出来。
例如:15=3*5,20=2*2*5,28=2*2*7。
回复列表 (共10个回复)
沙发
wanggcc [专家分:1450] 发布于 2005-12-06 16:43:00
就是分解公因数是吗?
板凳
冰睛 [专家分:30] 发布于 2005-12-06 17:01:00
因子也就是质因数?难道也是这个数的所有约数。(所以约数是如15,则所有红约数就是(1,15,3,5)我不知道约数跟质因数是不是同一个意思?
求约数是这样子的。:
input x
FOR A=1 TO INT(SQR(X)+1) STEP 1
IF X/A=X\A THEN
? A
B=X/A
IF A<>B THEN ? B
END IF
NEXT A
END
3 楼
冰睛 [专家分:30] 发布于 2005-12-06 17:03:00
有个字打错了,看得出来的。
刚才那题结果是:如 N=15 则输出:1,15,3,5
4 楼
冰睛 [专家分:30] 发布于 2005-12-07 17:18:00
楼主,你是不是老师呀。
5 楼
moz [专家分:37620] 发布于 2005-12-07 19:54:00
[url=http://www.programfan.com/club/showbbs.asp?id=119249]http://www.programfan.com/club/showbbs.asp?id=119249[/url]
6 楼
moz [专家分:37620] 发布于 2005-12-08 23:46:00
因数也是在质因数的基础上的,
其实从小到大也是有道理的,
把2反复检查是否能整除后,4就不能整除了,
所以分解质因数其实是可以跳过检查质数这一步的。
(是由飞鸟的旧贴的回复而延伸想起来的)
print jns$(15)
deflng a-z
function jns$(s)
for i=2 to s\2
do until s mod i
k$=k$+str$(i)+"*"
s=s/i
loop
next
jns$=k$
end function
7 楼
moz [专家分:37620] 发布于 2005-12-08 23:48:00
print jns$(15)
deflng a-z
function jns$(s)
k$=ltrim$(str$(s))+"=("
for i=2 to s\2
do until s mod i
k$=k$+ltrim$(str$(i))+"*"
s=s/i
loop
next
mid$(k$,len(k$),1)=")"
jns$=k$
end function
8 楼
冰睛 [专家分:30] 发布于 2005-12-09 00:09:00
看上去有好象有点复杂的.能分析一下思路最好了...呵呵
9 楼
moz [专家分:37620] 发布于 2005-12-11 11:52:00
print jns$(320) '[color=FF00FF]调用函数[/color]
deflng a-z '[color=FF00FF]将变量默认为整形[/color]
function jns$(s)
k$=ltrim$(str$(s))+"=(" '[color=FF00FF]为显示清楚描述[/color]
for i=2 to s\2 '[color=FF00FF]从最小的质因数到最大的质因数[/color]
do until s mod i '[color=FF00FF]反复整除质因数[/color]
k$=k$+ltrim$(str$(i))+"*" '[color=FF00FF]在字符串里加上质因数[/color]
s=s/i '[color=FF00FF]整除质因数[/color]
loop
next
mid$(k$,len(k$),1)=")" '[color=FF00FF]把最后一个“*”号去掉,加上右括号[/color]
jns$=k$
end function
比如要分解320的质因数吧,
首先先说说质因数和因数的关系,
因数不要求是质数,但都是质因数和1和数本身或其中的积的组成。
但总的来说,有效的还是质因数,因为因数也是由质因数而来的。
320=(2*2*2*2*2*2*5)
这看上去比较明白,而且其他因数都是1,320,和2与5的组成积
在程序的 for 循环中,
遍历320的除1,320外的所有可能的因数。
从小到大。
在程序的 do 循环中,
把某一个质因数反复检查是否能整除,反复除拼命除死劲除,
直到无法整除为止,
这样做的作用是这个质因数的次数除过后,
其他包含这个质因数的合数就没法进入因子的行列去了。
比如320来说,把2都除过6次了,
for 循环的后面的偶数就再也没办法进入整除的行列去了。
这就是从小到大的作用,得到的只有质因子。
10 楼
QB爱好者 [专家分:370] 发布于 2007-08-28 15:11:00
CLS
INPUT N
S = 1
DO
S=S+1
IF N MOD S=0 THEN '此处不用判质数,不信运行一下
N = N / S
PRINT S;
IF N<>1 THEN PRINT "*"; ELSE END
END IF
LOOP
END
我来回复