最简因子分解

作者在 2006-08-11 07:46:00 发布以下内容
***
***  最简因子分解  SF (C)Copyright 2006-2006 By Tiger5392
***
***  用法:
***      ?SF(nExpress)
***
***  参数:
***      nExpress为数值表达式,要求输入正整数
***
***  返回:
***      字符串,用逗号分开的所有最简因素及奇数因素个数,偶数因素个数,总因素个数,质数或合数
***      "0-没有参数": 如果没有参数
***      "1-参数不为数值": 如果参数不为数值
***      "2-参数不为正整数": 如果参数不为正整数
***
PARAMETERS nNum1
PRIVATE nNum1,nNum2,nNum3,cStr1,nCount,lOk,nCnt
IF PARAMETERS()=0
  RETURN "0-没有参数"
ENDIF
IF TYPE("nNum1")<>CHR(78)
  RETURN "1-参数不为数值"
ENDIF
IF nNum1<=0 OR INT(nNum1)<>nNum1
  RETURN "2-参数不为正整数"
ENDIF
cStr1="1"    &&返回的字符串的初始值
nNum2=nNum1
nCount=2     &&因数
nNum4=1      &&奇数个数
nNum5=0      &&偶数个数
DO WHILE nCount<=nNum2
  nNum3=nNum2/nCount
  IF INT(nNum3)=nNum3
    * 判断该因数是不是质数
    lOk=.T.
    FOR nCnt=2 TO SQRT(nCount)
      IF MOD(nCount,nCnt)=0
        lOk=.F.
        EXIT
      ENDIF
    ENDFOR
    IF LOk=.T.  &&是质因数
      cStr1=cStr1+","+ALLTRIM(STR(nCount))
      nNum2=nNum3
      IF MOD(nCount,2)=1
        nNum4=nNum4+1
      ELSE
        nNum5=nNum5+1
      ENDIF
    ENDIF
  ELSE
    nCount=nCount+1
  ENDIF
ENDDO
cStr1=cStr1+",奇数因素个数:"+ALLTRIM(STR(nNum4))
cStr1=cStr1+",偶数因素个数:"+ALLTRIM(STR(nNum5))
cStr1=cStr1+",所有因素个数:"+ALLTRIM(STR(nNum4+nNum5))
cStr1=cStr1+","+IIF(nNum4+nNum5=2,"质数","合数")
RETURN cStr1
VFP程序 | 阅读 1808 次
文章评论,共0条
游客请输入验证码
浏览116769次