FUNCTION PrimeQ(n) ! 素数判定 1 : 素数、 0 : 素数でない LET PrimeQ=0 IF n<2 OR n<>INT(n) THEN EXIT FUNCTION IF MOD(n,2)=0 THEN IF n=2 THEN LET PrimeQ=1 ELSE LET k=3 DO WHILE k*k<=n IF MOD(n,k)=0 THEN EXIT FUNCTION LET k=k+2 LOOP LET PrimeQ=1 END IF END FUNCTION PRINT PRINT "階乗を素因数分解します。" PRINT DIM T(200) MAT T=ZER INPUT PROMPT "200 までの自然数? ":x PRINT FOR i=1 TO 200 IF PrimeQ(i)=1 THEN LET w=INT(LOGX(i,x)) ! i^w < x < i^(w+1) IF w=O THEN EXIT FOR LET T(i)=0 FOR j=1 TO W LET T(i)=T(i)+INT(x/(i^j)) NEXT j END IF NEXT i PRINT x;"の階乗の素因数分解の要素たち" PRINT FOR i=1 TO 200 IF T(i)>0 THEN PRINT " ";i;"^";T(i) END IF NEXT i PRINT PRINT END EXTERNAL FUNCTION LOGX(m,n) ! n に対して m を底とする対数をとる LET LOGX=LOG(n)/LOG(m) END FUNCTION