0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【作ってみた】素数をランダムに出力してくれるWebページ

Posted at

【概要】

「ここからここまでの値の中からテキトーに素数を探したいなー」 と思った時に、使えるものがあったらいいなー。という思いから作ってみました。

【コード】

JSファイルの一部を公開します。

function search() {
    // 変数の取得:中略
   
    // 変数の補正:中略

    b = Math.ceil( fix( B , 10 , Bmax ) );
    a = Math.floor( fix( A , b - 1 , Amax ) );
    n = fix( N , 1 , Nmax );

    // エラトステネスの篩
    isP = new Array( b + 1 );
    for ( i = 0 ; i <= b ; i ++ ) {
        isP[ i ] = true;
    } 
    isP[ 0 ] = false;
    isP[ 1 ] = false;

    function check( i ) {
        if ( isP[ i ] ) {
            for ( k = i * i ; k <= b ; k += i ) {
                isP[ k ] = false;
            }
            if ( ( A <= i ) && ( i <= B ) ) {
                Prime.push( i );
            }
        }
    }

    // A以上B以下の素数を記録する配列を作成する
    Prime = new Array( 0 );
    check( 2 );
    check( 3 );
    i = 1;
    while ( true ) {
        if ( 6 * i - 1 <= b ) {
            check( 6 * i - 1 );
        }
        else {
            break;
        }
        if ( 6 * i + 1 <= b ) {
            check( 6 * i + 1 );
        }
        else {
            break;
        }
        i ++;
    }
    
    // 答えを出力する
    Save = new Array( 0 );
    Ans = `A = ${ A } , B = ${ B }<br>N = ${ n }<br>`;
    if ( Prime.length <= N ) {
        if ( Prime.length < N ) {
            Ans += `${ Prime.length }個しか見つけられなかったよ<br>`;
        }
        Save = Prime.slice();
    }

    else {
        
        while ( Save.length < n ) {
            r = Math.floor( Math.random() * Prime.length );
            s = Prime.splice( r , 1 );
            Save.push( s[ 0 ] );
        }
        Save.sort( ( a , b ) => a - b );
    }
    
    for ( i = 0 ; i < Save.length ; i ++ ) {
        Ans += `${ Save[ i ] }<br>`;
    }
    document.getElementById( "result" ).innerHTML = Ans;
    return;

}

【コード構造】

1. 変数A、B、Nを取得する
2. 変数の補正
3. 上限Bでエラトステネスの篩
4. 篩にかけると同時に、A以上B以下の素数を記録する配列Primeを作成する
5. 配列PrimeからランダムにN個だけ要素を取り出し、答えを昇順に出力する

今回素数を探す範囲は、A以上B以下。その中からN個だけ素数をランダムに出力します。

ここでNは自然数。表示枠の見やすさの問題がありそうなので、今回はNの上限を100に定めています。

Nの値が 「A以上B以下に存在する素数の数」 よりも大きければ、出力結果は毎回変化します。

【使用例】

スクリーンショット (162).png
スクリーンショット (163).png
スクリーンショット (164).png
スクリーンショット (165).png

【現時点で思いつく改善点】

・入力枠が小さい

ボックスにカーソルを合わせるだけで大変です。特に縦に小さいのが気になります。

・A、Bの入力枠とNの入力枠が同じサイズ

Nは高々3桁にしかならないので、同じサイズだとちょっと使いづらいかも。Nの入力フォームはもっと小さくていいような気がしています。

・殺風景

動作が重くならないように、装飾は最低限にしようと思っています。しかしそれにしたって、白背景に黒字だけで味気ない。色を付けたり枠を付けたり、シンプルでも見やすくする方法はあるはず。

【今後勉強したいこと】

・HTML、CSSの勉強

Webページを見やすいものにするため、Webデザインと機能はある程度身に付けておきたいですね。

・Node.jsなど

ここまでの制作物は、すべてJSと素数で遊んできただけ。簡単なゲームくらいはそろそろ作れるようになっているかも

やることリストなども作ってみたい。以前Node.jsを使ったやることリスト作成を試したことがありますが、途中で断念しています。再挑戦してみたい。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?