回 帖 发 新 帖 刷新版面

主题:求因子

给出一个整数,求它的因子,并按下面的格式打印出来。
例如:15=3*5,20=2*2*5,28=2*2*7。

回复列表 (共10个回复)

沙发

就是分解公因数是吗?

板凳

因子也就是质因数?难道也是这个数的所有约数。(所以约数是如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 楼

有个字打错了,看得出来的。

刚才那题结果是:如 N=15  则输出:1,15,3,5

4 楼

楼主,你是不是老师呀。

5 楼

[url=http://www.programfan.com/club/showbbs.asp?id=119249]http://www.programfan.com/club/showbbs.asp?id=119249[/url]

6 楼

因数也是在质因数的基础上的,
其实从小到大也是有道理的,
把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 楼

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 楼

看上去有好象有点复杂的.能分析一下思路最好了...呵呵

9 楼

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 楼

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

我来回复

您尚未登录,请登录后再回复。点此登录或注册