long long质因数分解模板
时间:2019-08-21
本文章向大家介绍long long质因数分解模板,主要包括long long质因数分解模板使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
#include <bits/stdc++.h> #define ll long long #define ull unsigned long long using namespace std; const ll inf = 1e18; const ll maxn = 1e18 + 4; typedef long double ld; const int N = 65, P = 5, prime[P] = {2, 3, 7, 61, 24251}; ll n, pn; ll f[N]; inline ll mul(ll a, ll b, ll p) { a %= p; b %= p; ll c = (ld)a*b/p; c = a * b - c * p; if(c < 0) c += p; else if(c > p) c -= p; return c; } inline ll ksm(ll x, ll y, ll p) { ll s = 1; while(y) { if(y & 1) s = mul(s,x,p); x = mul(x, x, p); y >>= 1; } return s; } inline ll twice(ll a, ll p) { ll d = p-1; int t = 0; while(!(d & 1)) d >>= 1, t++; ll x, y; x = y = ksm(a, d, p); while(t--) { y = mul(x, x, p); if(y == 1 && (x ^ 1) && (x ^ p)-1) return 0; x = y; } return y; } inline ll random(ll up) { return (ll)rand()*rand()%up; } ll gcd(ll x, ll y) { return !y?x:gcd(y, x % y); } inline ll abs(ll x, ll y) { return x < y? y - x: x - y; } inline bool Miller_Rabin(ll x) { for(int i = 0; i < P; i++) { if(x == prime[i]) return true; if(twice(prime[i], x)^1) return false; } return true; } inline ll trans(ll x, ll y, ll z) { return (mul(x, x, z) + y) % z; } void Pollard_rho(ll m) { if(Miller_Rabin(m)) { f[++f[0]] = m; return; } ll x1 = 0, x2 = 0, c = 0, p = 1; while(p == 1 || p == m) { x1 = trans(x1, c, m); x2 = trans(trans(x2, c, m), c, m); while(x1 == x2) { c = random(m); x1 = x2 = random(m); x2 = trans(x2, c, m); } p = gcd(abs(x1 - x2), m); } Pollard_rho(p); Pollard_rho(m/p); } int main() { ll n; cin >> n; if(n == 1){ cout << "NO" << endl; return 0; } srand(time(NULL)); Pollard_rho(n); sort(f + 1, f + 1 + f[0]); f[0] = unique(f + 1, f + 1 + f[0]) - (f + 1); for(int i = 1; i <= f[0]; i++){ //输出素因子个数 cout << f[i] << endl; } return 0; }
原文地址:https://www.cnblogs.com/philo-zhou/p/11390842.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 什么是计算机程序?操作系统、指令、进程、线程等
- Head First设计模式——状态模式
- Head First设计模式——代理模式
- [Maven]告警[WARNING] Unable to create Maven project from repository.
- Head First设计模式——复合模式
- [System.currentTimeMillis]/[Calendar.getInstance().getTimeInMillis()]/[new Date().getTime()]
- 【每日一题】32. Longest Valid Parentheses
- 面经手册 · 第3篇《HashMap核心知识,扰动函数、负载因子、扩容链表拆分深度学习(+实践验证)》
- Head First设计模式——桥接模式
- Head First设计模式——生成器模式和责任链模式
- Head First设计模式——蝇量模式和解释器模式
- 【每日一题】33. Search in Rotated Sorted Array
- 【每日一题】34. Find First and Last Position of Element in Sorted Array
- 【每日一题】35. Search Insert Position
- Head First设计模式——原型模式和访问者模式