Pollard_rho定理 大数的因数个数 这个板子超级快
https://nanti.jisuanke.com/t/A1413
AC代码
- #include <cstdio>
- #include <cstring>
- #include <cmath>
- #include <ctime>
- #include <iostream>
- #include <algorithm>
- #include <map>
- using namespace std;
- typedef long long ll;
- const int NUM=;//运算次数,Miller_Rabin算法为概率运算,误判率为2^(-NUM);
- ll t,f[];
- ll mul_mod(ll a,ll b,ll n)//求a*b%n,由于a和b太大,需要用进位乘法
- {
- a=a%n;
- b=b%n;
- ll s=;
- while(b)
- {
- if(b&)
- s=(s+a)%n;
- a=(a<<)%n;
- b=b>>;
- }
- return s;
- }
- ll pow_mod(ll a,ll b,ll n)//求a^b%n
- {
- a=a%n;
- ll s=;
- while(b)
- {
- if(b&)
- s=mul_mod(s,a,n);
- a=mul_mod(a,a,n);
- b=b>>;
- }
- return s;
- }
- bool check(ll a,ll n,ll r,ll s)
- {
- ll ans,p,i;
- ans=pow_mod(a,r,n);
- p=ans;
- for(i=;i<=s;i++)
- {
- ans=mul_mod(ans,ans,n);
- if(ans==&&p!=&&p!=n-)return true;
- p=ans;
- }
- if(ans!=)return true;
- return false;
- }
- bool Miller_Rabin(ll n)//Miller_Rabin算法,判断n是否为素数
- {
- if(n<)return false;
- if(n==)return true;
- if(!(n&))return false;
- ll i,r,s,a;
- r=n-;s=;
- while(!(r&)){r=r>>;s++;}
- for(i=;i<NUM;i++)
- {
- a=rand()%(n-)+;
- if(check(a,n,r,s))
- return false;
- }
- return true;
- }
- ll gcd(ll a,ll b)
- {
- return b==?a:gcd(b,a%b);
- }
- ll Pollard_rho(ll n,ll c)//Pollard_rho算法,找出n的因子
- {
- ll i=,j,k=,x,y,d,p;
- x=rand()%n;
- y=x;
- while(true)
- {
- i++;
- x=(mul_mod(x,x,n)+c)%n;
- if(y==x)return n;
- if(y>x)p=y-x;
- else p=x-y;
- d=gcd(p,n);
- if(d!=&&d!=n)return d;
- if(i==k)
- {
- y=x;
- k+=k;
- }
- }
- }
- void _find(ll n)//找出n的所有因子
- {
- if(Miller_Rabin(n))
- {
- f[t++]=n;//保存所有因子
- return;
- }
- ll p=n;
- while(p>=n)p=Pollard_rho(p,rand()%(n-)+);//由于p必定为合数,所以通过多次求解必定能求得答案
- _find(p);
- _find(n/p);
- }
- int main()
- {
- srand(time(NULL));//随机数设定种子
- ll n;
- while(scanf("%lld",&n)==)
- {
- if(n == ) {
- puts("");
- continue;
- }
- if(Miller_Rabin(n)){
- puts("");
- continue;
- }
- t=;
- _find(n);
- map<ll,ll> ma;
- for(int i=;i<t;i++)
- ma[f[i]]++;
- ll ans=;
- for(auto it:ma)
- ans*=it.second+;
- printf("%lld\n",ans);
- }
- return ;
- }
Pollard_rho定理 大数的因数个数 这个板子超级快的更多相关文章
- q次询问,每次给一个x,问1到x的因数个数的和。
q次询问,每次给一个x,问1到x的因数个数的和. #include<cmath> #include<cstdio> #include<cstring> usingn ...
- 积性函数&线性筛&欧拉函数&莫比乌斯函数&因数个数&约数个数和
只会搬运YL巨巨的博客 积性函数 定义 积性函数:对于任意互质的整数a和b有性质f(ab)=f(a)f(b)的数论函数. 完全积性函数:对于任意整数a和b有性质f(ab)=f(a)f(b)的数论函数 ...
- 牛客练习赛25 A 因数个数和(数论分块)
题意: q次询问,每次给一个x,问1到x的因数个数的和. 1<=q<=10 ,1<= x<=10^9 1s 思路: 对1~n中的每个数i,i作为i,2i,3i,...的约数,一 ...
- HDU4704Sum 费马小定理+大数取模
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4704 题目大意: 看似复杂,其实就是求整数n的划分数,4=1+1+2和4=1+2+1是不同的.因而可 ...
- 如何求数字n的因数个数及因数和
我们有可能在某些数学题中会求到某个数的因数和,那我们怎么求呢? 因为我们知道任意一个合数都可以由两个或多个质数相乘得到,那么我们就先分解质因数吧 例:我们随便去一个数吧,嗯,就108了,好算... 我 ...
- hdu 4704 Sum【组合数学/费马小定理/大数取模】By cellur925
首先,我们珂以抽象出S函数的模型:把n拆成k个正整数,有多少种方案? 答案是C(n-1,k-1). 然后发现我们要求的是一段连续的函数值,仔细思考,并根据组合数的性质,我们珂以发现实际上答案就是在让求 ...
- 【牛客练习赛 25】A 因数个数和
题目地址:https://www.nowcoder.com/acm/contest/158/A 参考博客:https://blog.csdn.net/zzcblogs/article/details/ ...
- LightOJ-1138 Trailing Zeroes (III) 唯一分解定理 算n!的某个因数个数
题目链接:https://cn.vjudge.net/problem/ 题意 找一个最小的正整数n 使得n!有a个零 思路 就是有几个因数10呗 考虑到10==2*5,也就是说找n!因数5有几个 数据 ...
- 【数论】[因数个数]P4167樱花
题目描述 求不定方程 \(\frac {1}{x} + \frac{1}{y} = \frac{1}{n!}\)的正整数解的个数 \(n \leq 100^6\) Solution 化简得 \(x * ...
随机推荐
- JSON Web Token(JWT)的详解
1.传统身份验证和JWT的身份验证 传统身份验证: HTTP 是一种没有状态的协议,也就是它并不知道是谁是访问应用.这里我们把用户看成是客户端,客户端使用用户名还有密码通过了身份验证,不过下回这个客户 ...
- 利用for循环和range输出9 * 9乘法口诀表
li = [2, 3, 4, 5, 6, 7, 8, 9, 10] for i in li: for j in range(1, i): print('{0} * {1} = {2}'.format( ...
- LeetCode(23)Merge k Sorted Lists
题目 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity ...
- Seven Puzzle Aizu - 0121 (搜索)
7 パズル ime limit1000 ms Memory limit131072 kB OSLinux Source3rd PC Koshien, Final 7 パズルは 8 つの正方形のカードと ...
- excel日期格式取年份
具体思路:先将日期格式更改为常规格式,再取常规格式的前4位数字 例如:A1==1981/12/22 第一步B1=TEXT(A1,"emd") 第二步C1=LEFT(B1,4) 结束
- JAVA、JDK等入门概念,下载安装JAVA并配置环境变量
一.概念 Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言,具体介绍可查阅百度JAVA百科,这里不再赘述. Java分为三个体系,分别为: Java SE(J2SE,Java2 Platf ...
- Nginx从入门到放弃-第4章 深度学习篇
4-1 Nginx动静分离_动静分离场景演示 4-2 Nginx动静分离_动静分离场景演示1 4-3 Nginx的动静分离_动静分离场景演示2 4-4 Rewrite规则_rewrite规则的作用 4 ...
- [python][oldboy]list append, extend
# coding=utf8 li = [1, 3, [1, "liu"], "liu"] print li li.append([1, 2]) print li ...
- 《人月神话》读书笔记(2)-week3
为了确保团队中的每个人都能保持系统概念上的完整性,关于项目的书面规格说明是必不可少的.手册要描绘用户可见的一切,但不应支配实现的过程.光有规格说明也是不够的,会议也是必要的.书中提到的周例会会迅捷地给 ...
- Spring c3p0连接池通过Hibernate配置
首先进行Hibernate配置,详见http://www.cnblogs.com/claricre/p/6509931.html 然后调用这三个包. 配置hibernate.cfg.xml文件: &l ...