用 js判断 一个数是否是素数(质数)_2020-09-20:如何判断一个数是质数?
福哥答案2020-09-20:#福大大架构师每日一题#
1.试除法。朴素素数筛,埃氏筛,欧拉筛和区间筛。代码采用朴素素数筛。
2.费尔马素性测试法法。费马小定理:假如p是质数,a是整数,且a、p互质,那么a的(p-1)次方除以p的余数恒等于1,即:a^(p-1)≡1(mod p)。
3.米勒拉宾素性检验法。二次探测定理:如果p是一个素数,0
4.综合法。试除法+米勒拉宾素性检验。
5.AKS算法。暂时无代码。
因为用到了大整数,所以用python语言编写。代码如下:
# -*-coding:utf-8-*-import mathimport timefrom functools import wrapsdef quick_power(a, b, p): """ 求快速幂。ret = a^b%p。 Args: a: 底数。大于等于0并且是整数。 b: 指数。大于等于0并且是整数。 p: 模数。大于0并且是整数。 Returns: 返回结果。 Raises: IOError: 无错误。 """ a = a % p ans = 1 while b != 0: if b & 1: ans = (ans * a) % p b >>= 1 a = (a * a) % p return ansdef timefn(fn): """计算性能的修饰器""" @wraps(fn) def measure_time(*args, **kwargs): t1 = time.time() result = fn(*args, **kwargs) t2 = time.time() print(f"@timefn: {fn.__name__} took {t2 - t1: .5f} s") return result return measure_time@timefndef is_prime_trial_division(num): """ 判断是否是素数。试除法。 Args: num: 大于等于2并且是整数。 Returns: 返回结果。true为素数;false是非素数。 Raises: IOError: 无错误。 """ if num <= 1: return False if num == 2 or num == 3 or num == 5 or num == 7: return True if num % 2 == 0: return False i = 3 while num % i != 0: if i * i >= num: return True i = i + 2 return False@timefndef is_prime_fermat(num): """ 判断是否是素数。费尔马素性测试法(Fermat primality test) 可能会把合数误判为质数。 Args: num: 大于等于2并且是整数。 Returns: 返回结果。true为素数;false是非素数。 Raises: IOError: 无错误。 """ if num <= 1: return False if num == 2 or num == 3 or num == 5 or num == 7: return True if num % 2 == 0: return False a = 2 # a是[2,num-1]之间的随机数 if quick_power(a, num - 1, num) == 1: return True else: return False# 米勒-拉宾素性检验是一种概率算法,但是,Jim Sinclair发现了一组数:2, 325, 9375, 28178, 450775, 9780504, 1795265022。用它们做 [公式] , [公式] 以内不会出错,我们使用这组数,就不用担心运气太差了。@timefndef is_prime_miller_rabin(num): """ 判断是否是素数。米勒拉宾素性检验是一种概率算法 可能会把合数误判为质数。 Args: num: 大于等于2并且是整数。 Returns: 返回结果。true为素数;false是非素数。 Raises: IOError: 无错误。 """ # num=(2^s)*t a = 2 # 2, 325, 9375, 28178, 450775, 9780504, 1795265022 s = 0 t = num - 1 num_1 = t if not (num % 2): return False while not (t & 1): t >>= 1 s += 1 k = quick_power(a, t, num) if k == 1: return True j = 0 while j < s: if k == num_1: return True j += 1 k = k * k % num return False@timefndef is_prime_comprehensive(num): """ 判断是否是素数。综合算法:试除法+米勒拉宾素性检验 可能会把合数误判为质数。 Args: num: 大于等于2并且是整数。 Returns: 返回结果。true为素数;false是非素数。 Raises: IOError: 无错误。 """ if num <= 1: return False if num & 1 == 0: return False # 100以内的质数表 primeList = [3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97] # 质数表是否能整除 for prime in primeList: if num == prime: return True if num % prime: if prime * prime >= num: return True else: return False # 米勒拉宾素性检验 return is_prime_miller_rabin(num)if __name__ == "__main__": print(is_prime_trial_division(12319), "试除法") print("----------------------") print(is_prime_trial_division(561), "试除法") print("----------------------") num = 1111111111111111111 # 质数 num = 561 # 合数 num = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F # 质数 num = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 # 质数 num = 2 ** 10000 + 111 # 合数 print(is_prime_fermat(num), "费尔马素性测试法") print("----------------------") print(is_prime_miller_rabin(num), "米勒拉宾素性检验") print("----------------------") print(is_prime_comprehensive(num), "综合法") print("----------------------") print("AKS算法,暂时没代码")
执行结果如下:
***
[评论](https://user.qzone.qq.com/3182319461/blog/1600556241)
用 js判断 一个数是否是素数(质数)_2020-09-20:如何判断一个数是质数?相关推荐
- 判断一个数是否是素数,为什么只要除到根号那个数就够了
一个数n如果不是素数那么一定存在若干因子(不少于2个), 假设最小的因子是p,那么p*p <= n 所以得:p<=根号np <= 根号np<=根号n
- Python判断一个数是否为素数
Python判断一个数是否为素数 """ 定义一个函数:用来判断一个数 是否为素数 函数名:isPrime 参数:数值n 返回值:布尔类型结果 ""& ...
- 输入一个整数,判断这个数是否为素数,(素数是除1以外只能被1和他本身整除的自然数)
#include <stdio.h> #include <math.h> int main(){ int a; scanf("%d",&am ...
- 学习-编写判断一个正整数是否为素数的函数
第1关:判断一个正整数是否为素数的函数 本关任务:编写一个 prime ()函数,判断一个正整数是否为素数,并且函数体里输出判断结果,该函数没有返回值.在主函数中输入10个正整数,调用prime () ...
- JS:利用函数,求任意三个数最大值,任意两个数的任意运算结果,判断任意数值是否为素数。
1.求任意三个数最大值 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- 用js函数判断一个数是否为素数
//判断一个数是否是素数 function zhishu (n) { var zhishu = true;//假设是质数 for(var i = 2;i < n/2; i++) { if(n % ...
- 用 js判断 一个数是否是素数(质数)_人教版五年级数学下册第2单元质数和合数(P14)图文讲解...
点击上方"学问林",选择"置顶公众号" 学问林致力于孩子的现代化学习与未来化发展 数学在线学习平台|传播前沿教育理念丨助力教师专业成长 走进千家万户的热文 ho ...
- 用 js判断 一个数是否是素数(质数)_小学五年级下册数学公式打印版,孩子寒假预习用的上!...
五年级下册数学公式小结 一.旋转.平移 时针旋转1小时是30度 二.因数与倍数 1.如果a×b=c(a.b.c都是不为0的整数),那么a.b就是c得因数,c就是a.b的倍数. 2.一个数的因数个数是有 ...
- 用 js判断 一个数是否是素数(质数)_小学五年级下册数学公式打印版,孩子考试用的上!...
五年级上册数学公式小结 第一单元:小数的乘法 一个因数乘另一个因数,两个因数的小数位数之和有几位, 积就有几位. 例如:3.45×6.29=21.7005 但是如果乘得的积小数末尾是零,零就可以省略不 ...
- 【javascript输入一个数判断这个数是否为素数】判断素数
判断素数 什么是素数:素数是指质数,一个大于1的自然数,除了1和它自身外,不能整除其他自然数的数叫做质数:否则称为合数.所以我们可以利用这个性质来判断这个数是否为素数. 基本代码: css部分: .b ...
最新文章
- java解析kafkaavro_如何使用Spring Kafka读取合并模式注册的AVRO消息?
- linux 内核网络协议栈--数据从接收到IP层(二)
- 01背包 || BZOJ 1606: [Usaco2008 Dec]Hay For Sale 购买干草 || Luogu P2925 [USACO08DEC]干草出售Hay For Sale...
- oracle入库的速度能到多少_多线程能提高Oracle的入库速度吗
- .Text 支持二级域名之二
- java socket 异步回调函数,分享nodejs异步编程基础之回调函数用法
- 问君能有几多愁,恰似不懂Linux SQL如何调优——聊聊SQL Server on Linux最佳实践
- 服务器内部错误_阿里云服务器被CC攻击怎么办
- 机器人 知乎碧桂园_碧桂园:机器人不独行
- 近期要养成的学习习惯
- 我的第九个java程序--spring和mybatis整合(java project)
- css3媒体查询尺寸
- Spring中的refresh()
- Python入门之函数调用
- ​LeetCode刷题实战248:中心对称数III
- [转]工商银行客户等级怎么划分?工商银行客户等级标准
- linux学习---内存管理以及结存结构描述
- 仿百度糯米页面 html5,Thinkphp5.0 仿百度糯米 开发多商家 电商平台(完整版)
- 谁说待国企就是养老?前阿里P8总结500页Java成长笔记全网首发!爱了爱了!
- Apache访问控制和Web虚拟主机
热门文章
- Orchard 的项目结构-解决方案文件夹的原理与使用
- 微信-js sdk invalid signature签名错误 问题解决
- VS2013+openCV3.0无脑配置方法+解决警告问题【windows平台】
- 解决AttributeError: XXX instance has no attribute ‘xxx‘的问题(新手必备)
- PHP开发中常见的安全问题详解和解决方法
- 解决python2.x文件读写编码问题
- 如何使用PHP解析JSON文件? [重复]
- ngFor with index作为属性中的值
- 检查是否已使用jQuery选中复选框
- 主分支和'起源/主人'有分歧,如何'疏远'分支'?