HDU 4344 随机法判素数(费马小定理
#include <cstdio>
#include <ctime>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N = 108;
const int S = 10; ll mult_mod(ll a, ll b, ll c) {
a %= c;
b %= c;
ll ret = 0;
while(b) {
if(b&1) ret = (ret + a) % c;
a = (a + a) % c;
b >>= 1;
}
return ret;
}
ll pow_mod(ll x, ll n, ll mod) {
if(n == 1) return x % mod;
x %= mod;
ll tmp = x, ret = 1;
while(n > 0){
if(n&1) ret = mult_mod(ret, tmp, mod);
tmp = mult_mod(tmp, tmp, mod);
n >>= 1;
}
return ret;
} bool check(ll a, ll n, ll x, ll t) {
ll ret = pow_mod(a, x, n);
ll last = ret;
for(int i = 1; i <= t; i ++) {
ret = mult_mod(ret, ret, n);
if(ret == 1 && last != 1 && last != n-1) return true;
last = ret;
}
if(ret != 1) return true;
return false; }
bool Miller_Rabin(ll n) {
if(n < 2) return false;
if(n==2||n==3||n==5||n==7) return true;
if(n%2==0||n%3==0||n%5==0||n%7==0) return false; ll x = n - 1, t = 0;
while((x&1)==0) {
x >>= 1;
t ++;
}
for(int i = 0; i < S; i ++) {
ll a = rand()%(n-1) +1;
if(check(a, n, x, t)) return false;
}
return true;
}
ll gcd(ll a, ll b) {
if(a < 0) return gcd(-a, b);
if(b < 0) return gcd(a, -b);
while(a > 0 && b > 0) {
if(a > b) a %= b;
else b %= a;
}
return a+b;
}
ll Pollard_rho(ll x, ll c) {
ll i = 1, k = 2;
ll x0 = ((rand() % x) + x) % x;
ll y = x0;
while(true) {
i ++;
x0 = (mult_mod(x0, x0, x) + c)%x;
ll d = gcd(y-x0, x);
if(d != 1 && d != x) return d;
if(y == x0) return x;
if(i == k) {
y = x0;
k += k;
}
} }
ll P[N], tot; void findfac(ll n) {
if(Miller_Rabin(n)) {
P[tot++] = n;
return ;
}
ll p = n;
while(p >= n){
p = Pollard_rho(p, rand()%(n-1)+1);
}
findfac(p);
findfac(n/p); }
int main() {
int T;scanf("%d", &T);
while(T-- > 0) {
ll n;scanf("%I64d", &n); tot = 0;
findfac(n);
sort(P, P + tot);
ll t = 0, ans = 0;
for(int i = 0; i < tot; i ++) {
if(!i || P[i] != P[i-1]) {
ans += pow_mod(P[i], count(P, P+tot, P[i]), n);
t ++;
}
}
printf("%I64d %I64d\n", t, t==1?n/P[0]:ans);
}
return 0;
}
HDU 4344 随机法判素数(费马小定理的更多相关文章
- HDU——5667Sequence(矩阵快速幂+费马小定理应用)
Sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total S ...
- HDU 5667 Sequence 矩阵快速幂+费马小定理
题目不难懂.式子是一个递推式,并且不难发现f[n]都是a的整数次幂.(f[1]=a0;f[2]=ab;f[3]=ab*f[2]c*f[1]...) 我们先只看指数部分,设h[n]. 则 h[1]=0; ...
- 2014多校第一场 I 题 || HDU 4869 Turn the pokers(费马小定理+快速幂模)
题目链接 题意 : m张牌,可以翻n次,每次翻xi张牌,问最后能得到多少种形态. 思路 :0定义为反面,1定义为正面,(一开始都是反), 对于每次翻牌操作,我们定义两个边界lb,rb,代表每次中1最少 ...
- hdu 4869 Turn the pokers(组合数+费马小定理)
Problem Description During summer vacation,Alice stay at home for a long time, with nothing to do. S ...
- HDU 4704 Sum (高精度+快速幂+费马小定理+二项式定理)
Sum Time Limit:1000MS Memory Limit:131072KB 64bit IO Format:%I64d & %I64u Submit Status ...
- 数学--数论--HDU 1098 Ignatius's puzzle (费马小定理+打表)
Ignatius's puzzle Problem Description Ignatius is poor at math,he falls across a puzzle problem,so h ...
- UVA10200-Prime Time/HDU2161-Primes,例题讲解,牛逼的费马小定理和欧拉函数判素数。
10200 - Prime Time 此题极坑(本菜太弱),鉴定完毕,9遍过. 题意:很简单的求一个区间 ...
- hdu 4704 Sum(组合,费马小定理,快速幂)
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4704: 这个题很刁是不是,一点都不6,为什么数据范围要开这么大,把我吓哭了,我kao......说笑的, ...
- [ACM] hdu 3923 Invoker (Poyla计数,高速幂运算,扩展欧几里得或费马小定理)
Invoker Problem Description On of Vance's favourite hero is Invoker, Kael. As many people knows Kael ...
随机推荐
- CCIE路由实验(3) -- BGP高级部分
当一个AS包含多个IBGP对等体时,路由反射器非常有用.因为IBGP客户只需要和路由反射器建立邻居关系,从而降低了IBGP的连接数量.路由反射器和它的客户合称为一个簇.路由反射是克服IBGP水平分割的 ...
- Page的生命周期及相关事件苛
(1)请求页面:页请求发生在页生命周期开始之前. (2)开始:在开始阶段,将设置页属性,如Request和Response.在此阶段,页还将确定请求是回发请求还是新请求,并设置IsPostBack属性 ...
- Android 电话自己主动接听和挂断具体解释
1.通过aidl及反射实现挂断电话 详细分三步: (1)ITelephony.aidl ,必须新建com.android.internal.telephony包并放入ITelephony.aidl文件 ...
- Effective C++ Item 40 明智而审慎地使用多重继承
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 经验:多重继承比单一继承复杂.它可能导致新的歧义性,以及对 virtual 继承的须要 演示 ...
- android 从服务器上获取APK并下载安装
简单的为新手做个分享. 网上有些资料,不过都是很零散,或是很乱的,有的人说看不懂. 一直有新手说 做到服务器更新APK时没有思路,这里做个简单的分享,希望有不同思路的可以讨论. 下 ...
- sharePoint常用命令
New-SPStateServiceDatabase -Name "StateServiceDatabase" | New-SPStateServiceApplication -N ...
- test code
<?php abstract class Mediator{ abstract public function send($message, $colleague); } abstract cl ...
- WebView使用详解
一.用WebView处理页面导航 可以加载本地资源也可以加载web资源,区别是我们要加载本地资源要实现在assets文件夹里添加一个.html资源.调取网页的时候可以用loadUrl方法把网址添加进去 ...
- ListView与DataTable传递数据
转载自:http://blog.sina.com.cn/s/blog_4b3485000100prhl.html 代码: using System; using System.Collections. ...
- 在Delphi开发的服务中调用指定应用程序
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://fxh7622.blog.51cto.com/63841/529033 在很多时候 ...