我是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
答案 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 />";
}
}