首页 > 其他分享 >Miller Rabin素数判定

Miller Rabin素数判定

时间:2024-01-20 16:37:34浏览次数:20  
标签:qmul Miller ll 素数 res Rabin mod

Miller Rabin素数判定

ll qmul(ll a,ll b,ll mod)//快速乘

{

    ll c=(ld)a/mod*b;

    ll res=(ull)a*b-(ull)c*mod;

    return (res+mod)%mod;

}

ll qpow(ll a,ll n,ll mod)//快速幂

{

    ll res=1;

    while(n)

    {

        if(n&1) res=qmul(res,a,mod);

        a=qmul(a,a,mod);

        n>>=1;

    }

    return res;

}

bool MRtest(ll n)//Miller Rabin Test

{

    if(n<3||n%2==0) return n==2;//特判

    ll u=n-1,t=0;

    while(u%2==0) u/=2,++t;

    ll ud[]={2,325,9375,28178,450775,9780504,1795265022};

    for(ll a:ud)

    {

        ll v=qpow(a,u,n);

        if(v==1||v==n-1||v==0) continue;

        for(int j=1;j<=t;j++)

        {

            v=qmul(v,v,n);

            if(v==n-1&&j!=t){v=1;break;}//出现一个n-1,后面都是1,直接跳出

            if(v==1) return 0;//这里代表前面没有出现n-1这个解,二次检验失败

        }

        if(v!=1) return 0;//Fermat检验

    }

    return 1;

}

 

标签:qmul,Miller,ll,素数,res,Rabin,mod
From: https://www.cnblogs.com/mingzhaomz/p/17976679

相关文章

  • 数据报告分享|WEKA贝叶斯网络挖掘学校在校人数影响因素数据分类模型
    全文链接:https://tecdat.cn/?p=33159原文出处:拓端数据部落公众号本文着眼普通高等学校在校学生人数,提出了不同种类学校的在校人数可能存在的影响关系从而探究教育现状的因素,建立分类模型,探求这几个因素间的数量关系。本文试图帮助客户通过研究不同种类学校的在校人数的关系,......
  • abc096d<素数筛,整除>
    题目D-Five,FiveEverywhere寻找n个素数,使得这n个素数中任意5个数之和都是合数。思路如果一个数除5余1,那么5个这样的数之和一定能被5整除;筛出范围内所有满足上述条件,且为素数的数即可。总结如何想到除五余一这一点呢?首先应思考如何构造合数,想到如果是5个数之和,那么......
  • 用方法来求素数!
    1packageexcel;2importjava.util.Scanner;3publicclasscode12{4publicstaticvoidmain(String[]args){5Scannersc=newScanner(System.in);6System.out.print("请输入N:");7intn=sc.nextInt();8......
  • 用试除法来判断100~200之间的素数
    include<stdio.h>include<string.h>include<math.h>intmain()//输出1-100以内的素数(试除法)//{//inta;//intcount=0;//for(a=100;a<=200;a++)//{// intj;//for(j=2;j<a;j++)//{//if(a%j0)// break;//}//if(aj)//{// count++;//printf(&......
  • 【教3妹学编程-算法题】移除后集合的最多元素数
    3妹:好冷啊,冻得瑟瑟发抖啦2哥 :这才哪跟哪,上海这几天温度算是高的啦。你看看哈尔滨,那才是冰城。3妹:据说沈阳千名“搓澡大姨”支援哈尔滨?哈哈哈哈2哥 :就像今年的淄博烧烤,可能有炒作的成分3妹:不不,是去年的了,今年已经24年啦。2哥,你说哈尔滨最多能住多少人,这么多人涌入哈尔滨,能住......
  • 筛素数
    筛素数1:埃式筛法(简单)原理:当枚举到一个数\(a\)得时候,我们将其的倍数都给删掉。因为这样子代表着被删掉的数除了1和其本身以外,最少还有\(a\)这个因子,故而成立。​ 若当枚举到一个数\(i\)的时候,\(i\)没有被删掉。因为\(i\)在之前都没有被删掉,说明从\(2\simi-1\)之中,没有其因......
  • R语言群组变量选择、组惩罚group lasso套索模型预测分析新生儿出生体重风险因素数据和
    原文链接:http://tecdat.cn/?p=25158原文出处:拓端数据部落公众号 本文拟合具有分组惩罚的线性回归、GLM和Cox回归模型的正则化路径。这包括组选择方法,如组lasso套索、组MCP和组SCAD,以及双级选择方法,如组指数lasso、组MCP。还提供了进行交叉验证以及拟合后可视化、总结和预测的实......
  • 区间素数筛模板
    例题素数密度template<typenameT>structsegment_sieve{ vector<bool>is_prime,is_prime_small; vector<T>prime; segment_sieve(){ is_prime.resize(1000010); is_prime_small.resize(1000100); } //对区间[a,b]内的整数执行筛法,is_prime[i-a]=true---......
  • c语言:判断一个数是不是素数
    首先了解一下素数素数(PrimeNumber)是指在大于1的自然数中,除了1和它本身外,不能被其他自然数整除的数。换句话说,一个大于1的自然数,只能被1和它本身整除,那么这个数就是素数。在数学中,素数的分布具有规律性,通常将小于10^6的素数称为小素数,将小于10^18的素数称为大素数。在计算机科学......
  • 打印100=200之间的素数(质数)
    只能被本身和1整除的数--素数#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>//1.试除法--低阶intmain(){ inti=0; intcount=0; for(i=100;i<=200;i++) { intj=0; for(j=2;j<=i;j++)//j从2开始是为了直接避免1这个数被除 { if(i%......