优化后的二次测试Miller_Rabin素性测试算法

ll random(ll n)
{
    return (ll)((double)rand()/RAND_MAX*n + 0.5);
}

ll pow_mod(ll a,ll p,ll n)
{
    if(p == 0)
        return 1;
    ll ans = pow_mod(a,p/2,n);
    ans = ans*ans%n;
    if(p%2)
        ans = ans*a%n;
    return ans;
}

bool Witness(ll a,ll n)
{
    ll m = n-1;
    int j = 0;
    while(!(m&1))
    {
        j++;
        m >>= 1;
    }
    ll x = pow_mod(a,m,n);
    if(x == 1 || x == n-1)
        return false;
    while(j--)
    {
        x = x*x%n;
        if(x == n-1)
            return false;
    }
    return true;
}

bool Miller_Rabin(ll n)
{
    if(n < 2)
        return false;
    if(n == 2)
        return true;
    if(!(n&1))
        return false;
    for(int i=1;i<=5;i++)   //5次测试
    {
        ll a = random(n-2)+1;
        if(Witness(a,n))
            return false;
    }
    return true;
}

int main()
{
    srand(time(NULL));
}

优化后的二次测试Miller_Rabin素性测试算法

时间: 2024-11-10 19:12:02

优化后的二次测试Miller_Rabin素性测试算法的相关文章

@总结 - [email&#160;protected] Miller-Rabin素性测试与Pollard-Rho因数分解

目录 @1 - 素性测试:Miller-Rabin算法@ @1.1 - 算法来源@ @1.2 - 算法描述@ @1.3 - 算法实现@ @2 - 因数分解:Pollard-Rho算法@ @2.0 - 参考资料@ @2.1 - 算法来源@ @2.2 - 算法描述@ @2.3 - 算法实现@ @1 - 素性测试:Miller-Rabin算法@ @1.1 - 算法来源@ 假如我们需要检测一个数 x 是否为素数,我们应该怎么做? 最显然的就是从 2~n-1 尝试去找到 x 的另一个因数. 当然可以稍微优

Tomcat 7优化前及优化后的性能对比

Tomcat 7在我们日常开发.测试.生产环境都会使用到,但对于大部分开发人员来说,对其性能还是没有多大了解.本文就对它做一次性能测试,对比优化前后的性能区别. 一.运行环境 CPU: Intel(R) Pentium(R) [email protected]  : 内存:4G,装的是32位win7,只认出3G,没有花时间去整ramdisk之类的东西: 操作系统:win7 32位: JDK:1.7.0_55 Tomcat:7.0.53 大家不要笑,公司电脑,就给配这样的,慢的要死,悲剧! 下面所

柯南君:教你如何对待大型网站平台的性能优化? 之 二--- 应用程序调优 (长篇总结)

柯南君:教你如何对待大型网站平台的性能优化? 之 "二"--- 应用程序调优(长篇总结) 柯南君 上一章 <柯南君:教你如何对待大型电商平台的性能优化?之 一 (方法.指标.工具.定位)>讲到了一些测试方法.测试指标.以及测试工具.稍微讲了一些如何定位的方法?这一章主要讲一下"如何优化应用程序,将其性能提升". 一.基本知识  1.下面讲一些JAVA 程序性能方面的一些看法,首先给大家讲一下应用程序调优,需要调优哪些项? ① 运算的性能 : 看哪一个算法

转载 素性测试

原文地址https://www.douban.com/note/271270932/ 对一个数是n否为素数的判断可以从2到根号n依次去除n,如果n能被其中一个整除则说明n不是素数,否则n是素数.还可以用厄拉多塞筛法,采用构造素数表的方式,从2起,依次列出后续数字,如果某个数是前面数字的倍数,则从表中删除,即删掉所有素数的倍数,最后得到的表就是一个全是素数的表.用于程序实现的话,可以设置一个栈,初始时栈内只有一个元素2,令从3起依次累加,并判断如果i不是栈内任何一个数的倍数,则令i进栈,否则继续循

Tomcat 7优化前及优化后的性能对比(转载)

一.运行环境 CPU: Intel(R) Pentium(R) [email protected]  : 内存:4G,装的是32位win7,只认出3G,没有花时间去整ramdisk之类的东西: 操作系统:win7 32位: JDK:1.7.0_55 Tomcat:7.0.53 大家不要笑,公司电脑,就给配这样的,慢的要死,悲剧! 下面所有测试都是基于1000个请求做的,且都是访问Tomcat默认的ROOT首页 二.未调优前 并发用户数从10-1000挨个测试,测试结果如下: 从上面的测试结果来看

Miller-Rabin 素性测试 与 Pollard Rho 大整数分解

\(\\\) Miller-Rabin 素性测试 考虑如何检验一个数字是否为素数. 经典的试除法复杂度 \(O(\sqrt N)\) 适用于询问 \(N\le 10^{16}\) 的时候. 如果我们要把询问范围加到 \(10^{18}\) ,再多组询问呢? Miller 和 Rabin 建立了Miller-Rabin 质数测试算法. \(\\\) Fermat 测试 首先我们知道费马小定理: \[ a^{p-1}\equiv 1\pmod p \] 当且仅当 \(p\) 为素数时成立. 逆命题是

Javascript优化后的加减乘除(解决js浮点数计算bug)

说明 众所周知,js在计算浮点数时候,结果可能会不准确.比如:(在chrome中的运算结果) 2.2 + 2.1 = 4.300000000000001 2.2 - 1.9 = 0.30000000000000027 2.2 * 2.2 = 4.840000000000001 2.1 / 0.3 = 7.000000000000001 网上流传的代码(有bug) 网上流传的优化后的代码如下(有问题的代码,请勿使用) function add(a, b) { var c, d, e; try {

数论部分第一节:素数与素性测试【详解】

数论部分第一节:素数与素性测试 一个数是素数(也叫质数),当且仅当它的约数只有两个——1和它本身.规定这两个约数不能相同,因此1不是素数.对素数的研究属于数论范畴,你可以看到许多数学家没事就想出一些符合某种性质的素数并称它为某某某素数.整个数论几乎就围绕着整除和素数之类的词转过去转过来.对于写代码的人来说,素数比想像中的更重要,Google一下BigPrime或者big_prime你总会发现大堆大堆用到了素数常量的程序代码.平时没事时可以记一些素数下来以备急用.我会选一些好记的素数,比如4567

冒泡排序-优化后的

时间复杂度 若文件的初始状态是正序的,一趟扫描即可完成排序.所需的关键字比较次数  和记录移动次数  均达到最小值:  ,  .所以,冒泡排序最好的时间复杂度为  . 若初始文件是反序的,需要进行  趟排序.每趟排序要进行  次关键字的比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置.在这种情况下,比较和移动次数均达到最大值: 冒泡排序的最坏时间复杂度为 . 综上,因此冒泡排序总的平均时间复杂度为 . 算法稳定性 冒泡排序就是把小的元素往前调或者把大的元素往后调.比较是相邻