Php新手提问代码的问题,求老师解答
这段是出书1-100内的素数。(新手简单的问题求老师悉心解答)<?phpfor($i=2;$i<=100;$i++){$flag=1;for($j=2;$j<=sqrt(...
这段是出书1-100内的素数。(新手简单的问题求老师悉心解答)
<?php
for($i=2;$i<=100;$i++)
{
$flag=1;
for($j=2;$j<=sqrt($i);$j++)
if(!($i%$j))
$flag=0;
if($flag)
echo "$i<br/>";
}
?>
问题如下:
1.$flag=1;$flag=0;这个在这段代码中起什么作用
2.请解释下这段代码, for($j=2;$j<=sqrt($i);$j++) 展开
<?php
for($i=2;$i<=100;$i++)
{
$flag=1;
for($j=2;$j<=sqrt($i);$j++)
if(!($i%$j))
$flag=0;
if($flag)
echo "$i<br/>";
}
?>
问题如下:
1.$flag=1;$flag=0;这个在这段代码中起什么作用
2.请解释下这段代码, for($j=2;$j<=sqrt($i);$j++) 展开
5个回答
展开全部
全部一起解释下吧:
1.for($i=2;$i<=100;$i++)是$i每递增1,只要<=100,就执行一个循环体(就是后面的{}包含的内容);
2. $flag=1这是一个标记,初始化为1;
3.for($j=2;$j<=sqrt($i);$j++),$j=2开始,只要$j<=sqrt($i)(意思是$j<=$i的平方根),那么就执行:if(!($i%$j))
4.if(!($i%$j)) $flag=0; $i%$j表示$i除以$j的余数,有两种情况:零和非零(真和假),if(!(假))就执行:$flag=0,将这个标记置零;if(!(真)),$flag=0这句不执行,仍然$flag=1;
5.if($flag):判断这个$flag是真还是假(0或1);真就echo "$i<br/>"; 假就不用执行echo了,就进行下一次循环。
1.for($i=2;$i<=100;$i++)是$i每递增1,只要<=100,就执行一个循环体(就是后面的{}包含的内容);
2. $flag=1这是一个标记,初始化为1;
3.for($j=2;$j<=sqrt($i);$j++),$j=2开始,只要$j<=sqrt($i)(意思是$j<=$i的平方根),那么就执行:if(!($i%$j))
4.if(!($i%$j)) $flag=0; $i%$j表示$i除以$j的余数,有两种情况:零和非零(真和假),if(!(假))就执行:$flag=0,将这个标记置零;if(!(真)),$flag=0这句不执行,仍然$flag=1;
5.if($flag):判断这个$flag是真还是假(0或1);真就echo "$i<br/>"; 假就不用执行echo了,就进行下一次循环。
展开全部
1,$flag=1;$flag=0;作为是否素数的标记位,1是,0不是,如果是素数if($flag),就打印出来echo "$i<br/>"
2,循环,sqrt是计算一个非负实数的平方根,%是取余,if(!($i%$j))就是 i 除 j 的余数取非!,就是如果i 除 j 没有余数,就是整除,那就不是素数,那就$flag=0;
2,循环,sqrt是计算一个非负实数的平方根,%是取余,if(!($i%$j))就是 i 除 j 的余数取非!,就是如果i 除 j 没有余数,就是整除,那就不是素数,那就$flag=0;
追问
if($flag)能写成
if($flag=1)或者if($flag=0)么
不用$flag标记行么?如果行的话,麻烦老师写出来行么?
追答
可以啊,if里面只要是非0的就是执行,是0就不执行,你试试 if(2) echo 111; 就知道了
你把$flag 换成$a也行,只是个变量
就这道题来说,不用标志位也可以的
for($i=2;$i";
}
这样的结果和原来的一样的
但是你要有这种意识,能帮助你以后处理其他复杂的问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.Flag不是乱竖的,也不能乱省。这里就是判断当前数字是否有约数,$j当做穷举的取模数时,如果取模后为0,加!为true,说明当前数字不是只有1和自己这两个约数,那么flag的值就为0(false),也就说if($flag) echo "$i<br/>";不会被执行到。!($i%$j) 可以把括号省掉。$flag的值要看出不是数字1 0而是布尔值true false。
2.for($j=2;$j<=sqrt($i);$j++)
因为乘法都是有交换律的,比如 2*5=5*2。 如果检测10是否有约数时就不必一直从2到10取模,只要到10的平方根即可,10的平方根大约等于3.16,检测2和3就可以了,不必要计算出个5,因为知道2就知道5。因为这个算法是穷举了所有的可能,太多的计算就是浪费。
2.for($j=2;$j<=sqrt($i);$j++)
因为乘法都是有交换律的,比如 2*5=5*2。 如果检测10是否有约数时就不必一直从2到10取模,只要到10的平方根即可,10的平方根大约等于3.16,检测2和3就可以了,不必要计算出个5,因为知道2就知道5。因为这个算法是穷举了所有的可能,太多的计算就是浪费。
追问
取模,是在php哪部分里学习啊,我原来怎么没看到过啊?老师
追答
$i%$j 知道是啥意思么?这就是取模,说白了就是取余数。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-10-24 · 知道合伙人软件行家
关注
展开全部
$flag 判断是否出现错误
出现错误时 flag=0 否则 flag=1
for($j=2;$j<=sqrt($i);$j++) for循环,从2开始,知道j小于i的平方根,每次循环后j的值自增1
出现错误时 flag=0 否则 flag=1
for($j=2;$j<=sqrt($i);$j++) for循环,从2开始,知道j小于i的平方根,每次循环后j的值自增1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询