福哥答案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:如何判断一个数是质数?相关推荐

  1. 判断一个数是否是素数,为什么只要除到根号那个数就够了

    一个数n如果不是素数那么一定存在若干因子(不少于2个), 假设最小的因子是p,那么p*p <= n 所以得:p<=根号np <= 根号np<=根号n

  2. Python判断一个数是否为素数

    Python判断一个数是否为素数 """ 定义一个函数:用来判断一个数 是否为素数 函数名:isPrime 参数:数值n 返回值:布尔类型结果 ""& ...

  3. 输入一个整数,判断这个数是否为素数,(素数是除1以外只能被1和他本身整除的自然数)

    #include <stdio.h> #include <math.h> int main(){     int a;     scanf("%d",&am ...

  4. 学习-编写判断一个正整数是否为素数的函数

    第1关:判断一个正整数是否为素数的函数 本关任务:编写一个 prime ()函数,判断一个正整数是否为素数,并且函数体里输出判断结果,该函数没有返回值.在主函数中输入10个正整数,调用prime () ...

  5. JS:利用函数,求任意三个数最大值,任意两个数的任意运算结果,判断任意数值是否为素数。

    1.求任意三个数最大值 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  6. 用js函数判断一个数是否为素数

    //判断一个数是否是素数 function zhishu (n) { var zhishu = true;//假设是质数 for(var i = 2;i < n/2; i++) { if(n % ...

  7. 用 js判断 一个数是否是素数(质数)_人教版五年级数学下册第2单元质数和合数(P14)图文讲解...

    点击上方"学问林",选择"置顶公众号" 学问林致力于孩子的现代化学习与未来化发展 数学在线学习平台|传播前沿教育理念丨助力教师专业成长 走进千家万户的热文 ho ...

  8. 用 js判断 一个数是否是素数(质数)_小学五年级下册数学公式打印版,孩子寒假预习用的上!...

    五年级下册数学公式小结 一.旋转.平移 时针旋转1小时是30度 二.因数与倍数 1.如果a×b=c(a.b.c都是不为0的整数),那么a.b就是c得因数,c就是a.b的倍数. 2.一个数的因数个数是有 ...

  9. 用 js判断 一个数是否是素数(质数)_小学五年级下册数学公式打印版,孩子考试用的上!...

    五年级上册数学公式小结 第一单元:小数的乘法 一个因数乘另一个因数,两个因数的小数位数之和有几位, 积就有几位. 例如:3.45×6.29=21.7005 但是如果乘得的积小数末尾是零,零就可以省略不 ...

  10. 【javascript输入一个数判断这个数是否为素数】判断素数

    判断素数 什么是素数:素数是指质数,一个大于1的自然数,除了1和它自身外,不能整除其他自然数的数叫做质数:否则称为合数.所以我们可以利用这个性质来判断这个数是否为素数. 基本代码: css部分: .b ...

最新文章

  1. java解析kafkaavro_如何使用Spring Kafka读取合并模式注册的AVRO消息?
  2. linux 内核网络协议栈--数据从接收到IP层(二)
  3. 01背包 || BZOJ 1606: [Usaco2008 Dec]Hay For Sale 购买干草 || Luogu P2925 [USACO08DEC]干草出售Hay For Sale...
  4. oracle入库的速度能到多少_多线程能提高Oracle的入库速度吗
  5. .Text 支持二级域名之二
  6. java socket 异步回调函数,分享nodejs异步编程基础之回调函数用法
  7. 问君能有几多愁,恰似不懂Linux SQL如何调优——聊聊SQL Server on Linux最佳实践
  8. 服务器内部错误_阿里云服务器被CC攻击怎么办
  9. 机器人 知乎碧桂园_碧桂园:机器人不独行
  10. 近期要养成的学习习惯
  11. 我的第九个java程序--spring和mybatis整合(java project)
  12. css3媒体查询尺寸
  13. Spring中的refresh()
  14. Python入门之函数调用
  15. ​LeetCode刷题实战248:中心对称数III
  16. [转]工商银行客户等级怎么划分?工商银行客户等级标准
  17. linux学习---内存管理以及结存结构描述
  18. 仿百度糯米页面 html5,Thinkphp5.0 仿百度糯米 开发多商家 电商平台(完整版)
  19. 谁说待国企就是养老?前阿里P8总结500页Java成长笔记全网首发!爱了爱了!
  20. Apache访问控制和Web虚拟主机

热门文章

  1. Orchard 的项目结构-解决方案文件夹的原理与使用
  2. 微信-js sdk invalid signature签名错误 问题解决
  3. VS2013+openCV3.0无脑配置方法+解决警告问题【windows平台】
  4. 解决AttributeError: XXX instance has no attribute ‘xxx‘的问题(新手必备)
  5. PHP开发中常见的安全问题详解和解决方法
  6. 解决python2.x文件读写编码问题
  7. 如何使用PHP解析JSON文件? [重复]
  8. ngFor with index作为属性中的值
  9. 检查是否已使用jQuery选中复选框
  10. 主分支和'起源/主人'有分歧,如何'疏远'分支'?