题目传送门

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. 黑客攻防技术宝典web实战篇:测试后端组件习题答案

    随书答案. 某网络设备提供用于执行设备配置的 Web 界面.为什么这种功能通常易于受 到操作系统命令注入攻击? 用于配置网络设备的应用程序通常包含使用正常的 Web 脚本 API 无法轻松实 现的功能 ...

  2. EditText制作简单的登录界面

    EditText与之前的TextView和Button的用法大体相同,用法案例如下: activity_edit_text.xml: <?xml version="1.0" ...

  3. Linux&Win双系统下时间显示不正常的问题

    于近期开始研究Linux,目前用的是ubuntu.本想着用Linux搞事情,没想到却被Linux搞了. 我安装的是双系统,Linux&windows的组合.相信刚开始用双系统的小伙伴们一定会碰 ...

  4. Springboot注解--@Controller和@RestController的区别

    1.使用@Controller 注解,在对应的方法上,视图解析器可以解析return 的jsp,html页面,并且跳转到相应页面:若返回json等内容到页面,则需要加@ResponseBody注解 2 ...

  5. 堆--P1168 中位数

    题目描述 给出一个长度为N的非负整数序列Ai​,对于所有1≤k≤(N+1)/2,输出A1,A3,…,A2k−1的中位数.即前1,3,5,…个数的中位数. 输入格式 第1行为一个正整数N,表示了序列长度 ...

  6. 寒假day03-python

    今天完成了毕设登录注册.填报等功能的界面优化,同时总结了python网络课程的部分知识点 1.修改jupyter notebook默认路径:进入cmd:(1)cd /d F:\(2)jupyter n ...

  7. SpringBoot2.0整合Quartz实现动态设置定时任务时间

    一.    引入依赖 <!-- 引入quartz依赖 --> <dependency> <groupId>org.springframework.boot</ ...

  8. python3拆包详解

    对于可迭代对象,如元组.列表.字符串.集合.字典这些可迭代对象都可以被拆包,拆包是指将一个结构中的数据拆分为多个单独变量中.拆包的方式大致有两种,一种是以变量的方式来接收,另一种是用'*'号.下面先讲 ...

  9. centos 从头部署java环境

    1.首先安装lrzsz 上传下载服务 yum install -y lrzsz 2.然后检查是否已经安装java rpm -qa|grep java 如果已经安装卸载后再重新安装 3.将下载好的jdk ...

  10. 1016D.Vasya And The Matrix#矩阵存在

    题目出处:http://codeforces.com/contest/1016/problem/D #include<iostream> #define ll long long int ...