在计算机科学中,素数指的是只能被1和本身整除的正整数。素数可以用于加密,数学推导和算法优化等领域。在实际应用中,求素数的算法也是非常重要的知识点之一,今天我们就来探讨如何用php中用脚本实现求素数。
筛选法筛选法是求素数的经典算法,其核心思想是不断地筛选掉不是素数的数,最终留下的就是素数。具体步骤如下:
初始化一个素数数组$prime = array(),把2到n(n为要求的范围)的数字都放进去。对于2~sqrt(n)(sqrt(n)代表n的平方根)的数字,依次判断是否是素数,如果是,则把它的倍数从素数数组中去掉。循环结束之后,素数数组中剩下的数字就是所有的素数。实现代码如下:
function sieve($n) {
$prime = array();
for($i = 2; $i <= $n; ++$i) {
$prime[$i] = true;
}
for($i = 2; $i <= sqrt($n); ++$i) {
if($prime[$i]) {
for($j = $i*$i; $j <= $n; $j += $i) {
$prime[$j] = false;
}
}
}
return array_keys(array_filter($prime));
}
费马小定理登录后复制
费马小定理是一个重要的数论定理,可以用来判断一个数是否为素数。费马小定理的表述如下:若p是质数,a是任意整数,则a^(p-1)≡1(mod p)。
具体步骤如下:
随机选择一个数a,判断a和n是否互质,如果不互质则直接返回false。计算a^(n-1) mod n的值,如果不等于1,则返回false。经过多次测试后,如果都满足上述两个条件,那么n很有可能是素数。实现代码如下:
function is_prime($n) {
if($n <= 1) {
return false;
}
for($i = 0; $i < 10; ++$i) {
$a = rand(1, $n-1);
if(gcd($a, $n) != 1) {
return false;
}
if(mod_pow($a, $n-1, $n) != 1) {
return false;
}
}
return true;
}
function gcd($a, $b) {
return ($b == 0) ? $a : gcd($b, $a%$b);
}
function mod_pow($base, $exp, $modulus) {
$result = 1;
while($exp > 0) {
if($exp % 2 == 1) {
$result = ($result * $base) % $modulus;
}
$exp = $exp >> 1;
$base = ($base * $base) % $modulus;
}
return $result;
}
登录后复制
以上就是用php中用脚本实现求素数的两种方法。需要注意的是,在求解大范围的素数时,筛选法往往比费马小定理更加高效。
以上就是php中用脚本实现求素数的详细内容,更多请关注php中文网其它相关文章!
© 版权声明
1. 本站所提供的源码模板(主题/插件)等资源仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,有部分资源为网上收集或仿制而来,若模板侵犯了您的合法权益,请来信通知我们(Email: 1311978956@qq.com),我们会及时删除,给您带来的不便,我们深表歉意!
2. 分享目的仅供大家学习和交流,请不要用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布投稿,分享有佣金分成!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务 请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长,可领回失去的金币,并额外有奖!
6. 如遇到加密压缩包,默认解压密码为"www.77ym.top",如遇到无法解压的请联系管理员!
7. 本站部分文章、资源来自互联网,版权归原作者及网站所有,如果侵犯了您的权利,请及时联系我站删除。免责声明
2. 分享目的仅供大家学习和交流,请不要用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布投稿,分享有佣金分成!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务 请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长,可领回失去的金币,并额外有奖!
6. 如遇到加密压缩包,默认解压密码为"www.77ym.top",如遇到无法解压的请联系管理员!
7. 本站部分文章、资源来自互联网,版权归原作者及网站所有,如果侵犯了您的权利,请及时联系我站删除。免责声明
THE END
暂无评论内容