Rumah > Artikel > pembangunan bahagian belakang > 用一个函数获取质数的疑惑
// 获取100?200之间的素数function main(){ for($i=100; $i<201; $i++){ $b = false; for($j=2; $j<$i-1; $j++){ $k = $i % $j; if($k == 0){ $b = true; //break; } } if(!$b){ echo $i ."<br>"; } }}// 我的疑虑在break那个地方,测试最后的结果,有没有break,都是一样的结果。// 但如果要用程序来解释数学定义,就得加上break对吧?
有没有 break 都不会影响打印的结果,因为打印的条件是 $i 素数
但是对于运行效率而言,没有 break 时需比较完全部数据后($i-1)才结束,而有 break 时则在发现第一个合数时就结束了,其后的无效劳动也就不必再做了
有没有 break 都不会影响打印的结果,因为打印的条件是 $i 素数
但是对于运行效率而言,没有 break 时需比较完全部数据后($i-1)才结束,而有 break 时则在发现第一个合数时就结束了,其后的无效劳动也就不必再做了
+1
你尝试求20000内或更大的质数时,你就知道有break和没break的区别了,你不妨测试一下
……
感谢xuzuning,让我又巩固了一把基础知识。
/*Navicat MySQL Data TransferSource Server : localhostSource Server Version : 50532Source Host : localhost:3306Source Database : testTarget Server Type : MYSQLTarget Server Version : 50532File Encoding : 65001Date: 2014-04-10 16:53:46*/SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for `guagua_config`-- ----------------------------DROP TABLE IF EXISTS `guagua_config`;CREATE TABLE `guagua_config` ( `gid` int(10) unsigned NOT NULL AUTO_INCREMENT, `eid` int(11) NOT NULL DEFAULT '0', `reward` text COMMENT '设置将项,序列化', `words` varchar(200) DEFAULT '', `stoptime` datetime DEFAULT NULL, PRIMARY KEY (`gid`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='刮刮有奖配置';-- ------------------------------ Records of guagua_config-- ------------------------------ ------------------------------ Table structure for `guagua_order`-- ----------------------------DROP TABLE IF EXISTS `guagua_order`;CREATE TABLE `guagua_order` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `eid` int(11) NOT NULL DEFAULT '0', `phone` int(11) NOT NULL DEFAULT '0', `name` varchar(10) NOT NULL DEFAULT '', `reward` varchar(10) NOT NULL DEFAULT '' COMMENT '所得奖', `time` datetime NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Records of guagua_order-- ----------------------------