Loading... 晚上在家没事,突然想起来之前一次面试时的题目,判断一个数是否为质数,当时就一直在想有没有啥简单方法,然而面试官其实只是想让我用for循环来判断而已. 有时候就是会自作聪明想找捷径却不得其法. 今天就在代码里实现以下吧. <?php //以命令行的模式来启动脚本,所以用$_SERVER['argv']来获取输入参数 $argv = $_SERVER['argv']; $number = $argv[1]; //比如保存代码为test.php 则脚本调用方式为 php test.php 13 //上一行注释中的13就是待计算是否为质数的数字 var_dump($number); echoBr(); function echoBr() { echo "\r\n"; } checkIsPrime($number); function checkIsPrime($number) { //因为是命令行模式输入的参数,我们前面获取的number肯定为字符串类型 //所以可以用ctype_digit函数乱来判断是否为正整数 if(!ctype_digit($number)) { echo 'must input nember bigger than 0 and is int'; return false; } //质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数 if($number<=2) { echo "It isn't Prime"; echoBr(); echo 'It is 2'; return false; } //从2开始,循环递增小于$number的除数$i求余数 for ($i=2;$i<$number;$i++) { $remainder = bcmod($number,$i); 使用bc函数取余数(取模) if($remainder == 0) //余数等于0的话说明可以整除,存在因数i,此时就可以提前结束循环返回结果了 { echo "It isn't Prime"; echoBr(); echo $i; echoBr(); echo $number/$i; return false; } } //直到循环结束未找到1和本身之外的因数,所以,可以判断该数为质数 echo "It is Prime"; return false; } 尝试如下结果 $ php test.php 3546546 string(7) "3546546" It isn't Prime 2 1773273 $ php test.php 4999999 string(7) "4999999" It is Prime 但是当输入数字比较大时,会出现意想不到的结果. $ php test.php 234234234234599999999999999999999999999999999999999999999999999999999354564546465456 string(84) "234234234234599999999999999999999999999999999999999999999999999999999354564546465456" It isn't Prime 2 1.171171171173E+83 输出的数字会自动转为科学计数法 个人建议,这代码,玩的时候,测试的数字不要太大,过大的数字要算很久很久很久 最后修改:2021 年 03 月 25 日 10 : 59 PM © 允许规范转载 赞赏 随便看看就好,打赏个一毛两毛也不错 赞赏作者 支付宝微信