// 擷取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 ."
";}}}// 我的疑慮在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-- ----------------------------