isPrimeイズプライム

引数に指定した数値が素数かどうかを調べます。素数の場合True、素数でない場合Falseを返します。

構文
  1. Boolean = isPrime( 数値 )
引数
数値 必須
素数かどうかを調べたい数値を指定
戻り値
TRUE
素数である
FALSE
素数ではない

プログラム

UWSC
//////////////////////////////////////////////////
// 【引数】
//   数値 : 素数かどうかを調べたい数値を指定 
// 【戻り値】
//   TRUE : 素数である、FALSE : 素数ではない 
//////////////////////////////////////////////////
FUNCTION isPrime(num)
	SELECT TRUE
		CASE num < 2
			RESULT = FALSE
			EXIT
		CASE num = 2
			RESULT = TRUE
			EXIT
		CASE num MOD 2 = 0
			RESULT = FALSE
			EXIT
	SELEND
	FOR n = 3 TO SQRT(num) STEP 2
		IFB num MOD n = 0 THEN
			RESULT = FALSE
			EXIT
		ENDIF
	NEXT
	RESULT = TRUE
FEND

解説

  1. 2,12行目
    UWSC
    	SELECT TRUE
    		…
    	SELEND
    num < 2
    3行目>>>
    num = 2
    6行目>>>
    num MOD 2 = 0
    9行目>>>
  2. 3-5行目
    UWSC
    		CASE num < 2
    			RESULT = FALSE
    			EXIT
    numが2未満ならFALSEを返す。
  3. 6-8行目
    UWSC
    		CASE num = 2
    			RESULT = TRUE
    			EXIT
    numが2ならTRUEを返す。
  4. 9-11行目
    UWSC
    		CASE num MOD 2 = 0
    			RESULT = FALSE
    			EXIT
    numを2で割った余りが0(numが偶数)ならFALSEを返す。
  5. 13,18行目
    UWSC
    	FOR n = 3 TO SQRT(num) STEP 2
    		…
    	NEXT
    n=3から\(\sqrt{\rm{num}}\)まで2ずつカウントアップ(n=3,5,7,…)。偶数は素数でないことは自明なので2ずつカウントする。
  6. 14-17行目
    UWSC
    		IFB num MOD n = 0 THEN
    			RESULT = FALSE
    			EXIT
    		ENDIF
    nで割り切れたらnumは素数ではないので、FALSEを返して終了。
  7. 19行目
    UWSC
    	RESULT = TRUE
    13行目>>>でループを抜けなければ素数なのでTRUEを返す。

この記事は役に立ちましたか?

はい
いいえ
ご協力ありがとうございます。

関連記事

ABS関数 (スクリプト関数)
引数の絶対値を求めます。
ARCCOS関数 (スクリプト関数)
引数の逆余弦を求めます。
CEIL関数 (スクリプト関数)
正の方向へ切り上げた数値を返します。
LN関数 (スクリプト関数)
自然対数を求めます。
LOGN関数 (スクリプト関数)
常用対数を求めます。
ZCUT関数 (スクリプト関数)
マイナス値を0にして返します。プラス値はそのままの値を返します。
isOdd (自作関数)
奇数かどうか調べます。
radToDeg (自作関数)
弧度法(Radian)を度数法(Degree)に変換します。度数法を弧度法に変換するにはDegToRad関数を使います。
degToRad (自作関数)
度数法(Degree)を弧度法(Radian)に変換します。弧度法を度数法に変換するにはRadToDeg関数を使います。
ARCSIN関数 (スクリプト関数)
引数の逆正弦を求めます。