题目传送门

sol:Pollard_Rho的模板题,刚看了Pollard_Rho和Miller_Rabin很多原理性的东西看不懂,只是记住了结论勉强能敲代码。

  • Pollard_Rho

    #include "cstdio"
    #include "cstdlib"
    #include "algorithm"
    #include "ctime"
    using namespace std;
    typedef long long LL;
    LL gcd(LL a, LL b) {
    return b == ? a : gcd(b, a % b);
    }
    LL muli_mod(LL n, LL k, LL p) {
    LL m = ;
    while (k) {
    if (k & ) m = (m + n) % p;
    n = (n + n) % p;
    k >>= ;
    }
    return m;
    }
    LL pow_mod(LL n, LL k, LL p) {
    LL m = ;
    while (k) {
    if (k & ) m = muli_mod(m, n, p);
    n = muli_mod(n, n, p);
    k >>= ;
    }
    return m;
    }
    LL miller_rabin(LL n) {
    if (n == ) return true;
    if (n < || !(n & )) return false;
    LL m = n - ; int s = ;
    while (!(m & )) s++, m >>= ;
    for (int i = ; i <= ; i++) {
    LL r = rand() % (n - ) + ;
    LL y = pow_mod(r, m, n);
    for (int j = ; j <= s; j++) {
    LL x = muli_mod(y, y, n);
    if (x == && y != && y != n - ) return false;
    y = x;
    }
    if (y != ) return false;
    }
    return true;
    }
    LL pollard_rho(LL n, LL c) {
    int i = , k = ;
    LL x = rand() % (n - ) + ;
    LL y = x;
    while (true) {
    x = (muli_mod(x, x, n) + c) % n;
    LL p = gcd((y - x + n) % n, n);
    if (p > && p < n) return p;
    if (x == y) return n;
    if (++i == k) {
    k <<= ;
    y = x;
    }
    }
    }
    LL find(LL n) {
    if (miller_rabin(n)) return n;
    LL p = n;
    while (p >= n) p = pollard_rho(p, rand() % (n - ) + );
    return min(find(p), find(n / p));
    }
    int main() {
    int t; LL n;
    // srand(time(NULL));
    scanf("%d", &t);
    while (t--) {
    scanf("%lld", &n);
    LL p = find(n);
    if (p == n) puts("Prime");
    else printf("%lld\n", p);
    }
    return ;
    }

    POJ不让用万能头,algorithm下的__gcd也不让用。关键srand用一下还RE,挺坑的。

POJ-1811-Prime Test(pollard_rho模板,快速找最小素因子)的更多相关文章

  1. Miller_rabin算法+Pollard_rho算法 POJ 1811 Prime Test

    POJ 1811 Prime Test Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 32534   Accepted: 8 ...

  2. POJ 1811 Prime Test (Rabin-Miller强伪素数测试 和Pollard-rho 因数分解)

    题目链接 Description Given a big integer number, you are required to find out whether it's a prime numbe ...

  3. 数论 - Miller_Rabin素数测试 + pollard_rho算法分解质因数 ---- poj 1811 : Prime Test

    Prime Test Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 29046   Accepted: 7342 Case ...

  4. Miller&&Pollard POJ 1811 Prime Test

    题目传送门 题意:素性测试和大整数分解, N (2 <= N < 254). 分析:没啥好讲的,套个模板,POJ上C++提交 收获:写完这题得到模板 代码: /************** ...

  5. POJ 1811 Prime Test (Pollard rho 大整数分解)

    题意:给出一个N,若N为素数,输出Prime.若为合数,输出最小的素因子.思路:Pollard rho大整数分解,模板题 #include <iostream> #include < ...

  6. POJ 1811 Prime Test

    题意:对于一个大整数,判断是否质数,如果不是质数输出最小质因子. 解法:判断质数使用Miller-Rabin测试,分解质因子使用Pollard-Rho,Miller-Rabin测试用的红书模板,将测试 ...

  7. poj 1811 Prime Test 大数素数测试+大数因子分解

    Prime Test Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 27129   Accepted: 6713 Case ...

  8. POJ 1811 Prime Test( Pollard-rho整数分解经典题 )

    链接:传送门 题意:输入 n ,判断 n 是否为素数,如果是合数输出 n 的最素因子 思路:Pollard-rho经典题 /************************************** ...

  9. POJ 1811 Prime Test(Miller-Rabin & Pollard-rho素数测试)

    Description Given a big integer number, you are required to find out whether it's a prime number. In ...

随机推荐

  1. Go语言-并发模式-goroutine池实例(work)

    介绍 使用无缓冲的通道来创建一个 goroutine 池,这些 goroutine 执行并控制一组工作,让其并发执行.在这种情况下,使用无缓冲的通道要比随意指定一个缓冲区大小的有缓冲的通道好,因为这个 ...

  2. 【mui webAPP】HBuilder创建的iOS平台设置沉浸式状态栏

    应用占用全屏区域,而系统状态栏需要预留出系统状态栏高度. HBuilder创建的应用默认不使用沉浸式状态栏样式,需要进行如下配置开启:打开应用的manifest.json文件,切换到代码视图,在plu ...

  3. 33. docker swarm 集群服务通信 之 RoutingMesh - Ingress 网络

    1.作用 当在 任何 一个 swarm 节点去访问 端口服务的时候 会通过 本节点 的 IPVS ( ip virtual service ) 到 真正的 swarm 节点上 当访问 docker h ...

  4. 基本 Python 词汇

    本文档介绍了要理解“使用 Python 进行地理处理”的帮助文档需要掌握的一些词汇. !   术语 说明 Python Python 是由 Guido van  Rossum 在上世纪八十年代末构想并 ...

  5. canvas实现粒子星空连线

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>离 ...

  6. 配置Action

    配置Action 实现了Action类后,就可以在struts.xml中配置该Action类了.配置Action就是让Struts2 知道哪个Action处理哪个请求,也就是完成用户请求和Action ...

  7. 关系数据库和NOSQL比较

    关系数据库 NOSQL 功能:       NOSQL            功能简单           基本只支持主键查询,有的NOSQL支持非主键查询(不过非主键查询时,其性能也很慢),很少有N ...

  8. python_pycharm控制台输出带颜色

    一.书写格式: 设置颜色开始:\033[显示方式;前景色;背景色m] 结束:\033[0m 二.颜色参数: 前景色 背景色 颜色 ----------------------------------- ...

  9. SQL注入常用函数(注入小白的学习笔记)

    在盲注的情况下,往往需要一个一个字符的去猜解,即过程中需要截取字符串 在这里整理了一下一些常用函数 由于现阶段学习不够深入,整理分类不清楚具体,不过博主会慢慢进行完善 user() 查询当前数据库用户 ...

  10. 吴裕雄--天生自然Linux操作系统:Linux常用命令大全

    系统信息 arch 显示机器的处理器架构 uname -m 显示机器的处理器架构 uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI) ...