使用PHP查找3到100之间的数字因子

时间:2016-01-19 03:01:02

标签: php

我是PHP的初学者,我试图找到介于3和100之间的2到10之间的因子。如果它是素数,则说出来。

我无法弄清楚为什么我的代码说所有数字都是素数除了10的倍数,即使如此,如果它是10的倍数它只显示10作为因子而不是2.5等...任何帮助深表感谢!

for ($x = 3; $x <= 100; $x++) {
        $y = 2;
        do {
            $factors = array();
            if ( $x % $y == 0 and $x != $y) {
                $factors[] = $y;
            }
            $y++;
        }while ($y <= 10); 
        if (count($factors) == 0) {
            echo "$x is a prime number.<br />";
        }else {
            echo " The factors of $x are: "; foreach($factors as $factor) {echo "$factor ";} echo "<br />";
        }
    }

我得到的结果:

3 is a prime number.
4 is a prime number.
5 is a prime number. 
6 is a prime number.

我想要的结果:

3 is a prime number.
The factors of 4 are: 2
5 is a prime number.
The factors of 6 are: 2, 3

2 个答案:

答案 0 :(得分:0)

您在while循环的每次迭代中重置因子数组,而不是每个数字。

将其更改为:

for ($x = 3; $x <= 100; $x++) {
    $y = 2;
    $factors = array();
    do {            
        if ( $x % $y == 0 and $x != $y) {
            $factors[] = $y;
        }
        $y++;
    }while ($y <= 10); 
    if (count($factors) == 0) {
        echo "$x is a prime number.<br />";
    }else {
        echo " The factors of $x are: "; foreach($factors as $factor) {echo "$factor ";} echo "<br />";
    }
}

答案 1 :(得分:0)

请将数组初始化移至外部循环。希望这是唯一的问题。

        $factors = array();
        do {            
            if ( $x % $y == 0 and $x != $y) {
                $factors[] = $y;
            }
            $y++;
        } while ($y <= 10); 

您可以使用implode()将其逗号分隔

for ($x = 3; $x <= 100; $x++) {
    $y = 2;
    $factors = array();
    do {

        if ( $x % $y == 0 and $x != $y) {
            $factors[] = $y;
        }
        $y++;
    } while ($y <= 10);
    if (count($factors) == 0) {
        echo "$x is a prime number.<br />";
    }else {
        echo " The factors of $x are: ".implode(', ', $factors)."<br />";
    }
}