paizaレベルアップ問題集「エラトステネスの篩 PHP編」

問題文をよく読まなかったせいで最初75点でした。
平均点がほぼそれなので皆さんひっかかったものと思われます。

コード例

<?php
    // 自分の得意な言語で
    // Let's チャレンジ!!
    
    //1. X が素数のとき is_prime[X] が true となる配列 is_prime を用意し、
    //is_prime[0] , is_prime[1] を false , それ以外を true で初期化する。

    //2. 整数 i を 2 から順に N まで動かしながら次の操作を行う。
    //「is_prime[i] が true である場合、 is_prime[2×i], is_prime[3×i], ... , is_prime[k×i] を全て false にする(ただし k×i <= N )
    
    
    //get data
    
    $num = trim(fgets(STDIN));
    //$num=10; //test sample
    
    
    //配列初期化
    
    $is_prime = array();
    $is_prime[0] = false;
    $is_prime[1] = false;
    
    for($i=2; $i<$num; $i++){
        $is_prime[$i] = true;
    }
    
    //print_r($is_prime);
    
    
    //process
    
    for($i=2; $i<$num; $i++){
        if($num % $i == 0){//わりきれる
        
            $is_prime[$i] = true;
            for($j=$i+1; $j<$num; $j++){
                $k = $i*$j;
                $is_prime[$j] = false;
            }
        }else{
            $is_prime[$i] = false;
        }
    }
    
     //print_r($is_prime);
     
     
     //output answer
     
     if($num == 1){
         echo("NO\n");
     }elseif(array_sum($is_prime)==0){
         echo("YES\n");
     }else{
         echo("NO\n");
     }
    
?>

$num=1の場合の分岐がアンサー出力時に必要でした(笑)

あぶらぼうず
ひっかかりました。

問題文

https://paiza.jp/works/mondai/prime_number_primer/prime_number_primer__eratosthenes

0

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です