从用户的输入php打印素数

时间:2019-02-24 08:56:08

标签: php

我正在尝试制作一个程序,该程序将询问用户一个数字,然后在数组中显示0到该数字之间的所有素数。

<?php

class SmallerPrimes{

public function __construct($file){

    $this->input_filename = $file;

}

public function Main(){

    $smaller_than = (int)$this->readString()[0];

    $result = array();        

     /* YOUR CODE HERE */          

     function isPrime($n) 
    { 
        if ($n <= 1) 

            return false; 

        for ($i = 2; $i < $n; $i++) 

            if ($n % $i == 0) 

                return false; 

        return true; 
    }         

    function printPrime($n) 
    { 
        for ($i = 2; $i <= $n; $i++)  
        { 
            if (isPrime($i)) 

                echo $i . " "; 
        } 
    }        
    $n = 7; 

    printPrime($n);              

     /*end of your code here */       

    return $result;
}

public function readString(){

    $file = fopen($this->input_filename, "r");

    $line = array();

    while (!feof($file)){

        array_push($line, str_replace(PHP_EOL, "", fgets($file)));
    }
    return $line;
}
}

$o = new SmallerPrimes($argv[1]);
echo implode(" ", $o->Main()) . PHP_EOL;

此代码有效,但固定了$ n。 我不知道如何使用要求用户输入数字的输入 这是一个验证自己并在可以的情况下向我们显示的代码

我要完成的代码就是这个(我们一开始只有这个):

class SmallerPrimes{

public function __construct($file){

    $this->input_filename = $file;

}

public function Main(){

    $smaller_than = (int)$this->readString()[0];

    $result = array();

     /* YOUR CODE HERE */     

    return $result;

}

public function readString(){

    $file = fopen($this->input_filename, "r");

    $line = array();

    while (!feof($file)){

        array_push($line, str_replace(PHP_EOL, "", fgets($file)));

    }

    return $line;

    }
}

$o = new SmallerPrimes($argv[1]);

echo implode(" ", $o->Main()) . PHP_EOL;

2 个答案:

答案 0 :(得分:0)

这是您的脚本:

<?php
class SmallerPrimes{
public function __construct($file){
    $this->input_filename = $file;
}
public function Main(){
    $smaller_than = (int)$this->readString()[0];
    $result = array();
     function isPrime($n) {
        if ($n <= 1) return false;
        for ($i = 2; $i < $n; $i++) if ($n % $i == 0) return false;
        return true;
    }
    function printPrime($n) {
        for ($i = 2; $i < $n; $i++) if (isPrime($i)) $result[] = $i;
        return $result;
    }
    $result = printPrime($smaller_than);
    return $result;
}
public function readString(){
    $file = fopen($this->input_filename, "r");
    $line = array();
    while (!feof($file)){
        array_push($line, str_replace(PHP_EOL, "", fgets($file)));
    }
    return $line;
}}
$o = new SmallerPrimes($argv[1]);
echo implode(" ", $o->Main()) . PHP_EOL;

答案 1 :(得分:0)

function getSmallerPrimes($smaller_than) {
    if ($smaller_than <= 2) {
        return [];
    }
    $result = [2];
    $sqrt = sqrt($smaller_than);

    for ($n = 3; $n < $smaller_than; $n += 2) {
        $isPrime = true;
        foreach($result as $prime) {
            if ($n % $prime == 0) {
                $isPrime = false;
                break;
            }
            if ($prime > $sqrt) {
                break;
            }
        }
        if ($isPrime) {
            $result[] = $n;
        }
    }
    return $result;
}

$input = 23;
echo implode(' ', getSmallerPrimes($input));

结果:2 3 5 7 11 13 17 19