PHP中操作任意精度大小的GMP扩展学习( 二 )


其它运算操作生成随机数echo gmp_random_range("10000000000000", "99999999999999999"), PHP_EOL; // 83490559526159213// 12500000000echo gmp_random_bits(99999),PHP_EOL; // 289814632948807684404778811091812938699609………………就和普通的生成随机数的函数一样,只不过 GMP 扩展库下面的这两个函数能够生成的数字范围更大,而且返回的也是 GMP 对象的格式 。对于 gmp_random_bits() 来说,最大的范围是 12500000000 ,我的机子如果使用这个随机因子的话直接就会报超出内存了 。而使用 99999 这个随机因子生成的随机数字也已经非常大了,大家可以自己尝试一下 。
阶乘这个是普通的 Math 库中所没有的函数 。直接帮我们计算阶乘的结果,不用自己写算法了哦 。
echo gmp_fact(5), PHP_EOL; // 1205*4*3*2*1=120echo gmp_fact(50), PHP_EOL; // 30414093201713378043612608166064768844377641568960512000000000000 50*49*48…………*2*1素数除了阶乘之外,GMP 还提供了非常高大上的直接获取和判断素数的函数 。一般来说,素数(质数)也是面试中非常常见的算法题目,我们在面试的时候还是要掌握自己手写的能力,但是手写完之后能和面试官说一下 GMP 中已经有现成的函数了相信也会带来一些加分 。
echo gmp_nextprime(10), PHP_EOL; // 11echo gmp_nextprime(1000), PHP_EOL; // 1009echo gmp_prob_prime(6), PHP_EOL; // 0echo gmp_prob_prime("1111111111111111111"), PHP_EOL; // 1echo gmp_prob_prime(7), PHP_EOL; // 2gmp_nextprime() 是获取指定数字之后的下一个素数是多少 。gmp_prob_prime() 则是判断给写的数字是否是素数,它有三种结果,0 表示不是素数,1 表示可能(疑似)素数,2 表示确定是素数 。
数据的符号信息echo gmp_sign("500"), PHP_EOL; // 1echo gmp_sign("-500"), PHP_EOL; // -1echo gmp_sign("0"), PHP_EOL; // 0最后这个 gmp_sign() 函数用来表示给定数据的符号信息,也就是正负数 。它也是三种结果,1 表示正数,-1 表示负数,0 表示 0。为什么会有一个特殊的 0 存在呢?因为 0 即不是正数也不是负数呀,它本身就是一个特殊的存在 。
总结关于 GMP 扩展还有很多方法并没有一一列举出来,在这里只是挑选了一些比较常用的内容给大家介绍一下 。虽说是刷文档,但也不能直接照搬文档过来,所以更多的内容大家还是自行去文档中查阅,我们学习的目的主要就是知道有这么个东西,不至于在真实的业务需求中踫到了相关的内容时抓瞎 。
测试代码:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202012/source/8.PHP中操作任意精度大小的GMP扩展学习.php
参考文档:
https://www.php.net/manual/zh/book.gmp.php




推荐阅读