回 帖 发 新 帖 刷新版面

主题:[讨论]求助一题!

求助!!分解质因数的程序怎么编?希望给程序的把各段功能及思路说一下![em2]

回复列表 (共6个回复)

沙发

[url]http://bbs.pfan.cn/post-119249.html[/url]

板凳

例题:给一个正整数,求出它的因数,并按下面的形式打印出来,
     如:36=2*2*3*3        15=3*5

分析:判断一个数I是否为正整数N的因数条件是N MOD I=0,任何 一正整数N的因数都是由若干个从2开始的素数构成。
      故求一正整数N的因数首先从2开始判断,若N MOD 2 =0,则:2是N的一个因数,紧接着再判断N/2 MOD 2的值是否为0。如果为0,则2是N的因数,如果不为0,再判断N/2 MOD 3的值是否数0,如果为0,则3是N的一个因数……如此循环。
     本题的外循环的循环变量从2至N,内循环由于循环次数不定,因而只能采用WHILE/WEND结构或DO/LOOP结构。


程序:
CLS
INPUT N
PRINT N;“=”;
FOR I=2 TO N
    WHILE N MOD I=0
          IF N=I THEN PRINT N:END
          N=N/I
          PRINT I;“*”;
   WEND
NEXT I
END


注:可以以N=36这个数据再分析程序,以便真正了解每行程序的含义。

3 楼

我的算法:
先求出2-SQR(n)的所有质数,然后用它们去除n,能除尽的就除,除不尽的就测试下一个质数,直到n=1。

4 楼

DECLARE FUNCTION isprime! (x!)
CLS
INPUT n
PRINT n; "=";
IF isprime(n) THEN PRINT n: END
DIM a(1 TO n \ 2): t = 0
FOR i = 2 TO n \ 2
    IF isprime(i) THEN t = t + 1: a(t) = i
NEXT i
FOR i = 1 TO t
    DO UNTIL n MOD a(i) <> 0
       n = n \ a(i)
       IF n > 1 THEN
          PRINT a(i); "*";
       ELSE
          PRINT a(i): END
       END IF
    LOOP
NEXT i
END

5 楼

cls
input n
for i=2 to sqr(n)
10 if n mod i=0 then print i;"*";:n=n\i:goto 10
next i
print "=";n
end

6 楼

谢谢各位!

我来回复

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