作者在 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
*** 最简因子分解 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