[BZOJ4522][pollard rho][exgcd]CQOI2016:密钥破解

BZOJ4522

又来做愉快的板子OI

题面很复杂啊,但是读完题就会发现我们只需要求几个线性同余方程的解和质因数分解一个最大为 2 62 2^{62} 262的数(保证此数等于两个不等质数p,q之积)

如果你不会线性同余方程请出门右转NOIP专区
如果你不会分解那个巨大的数(不好意思我做这题之前也不会 )请去了解一下pollard rho算法
zxyoi的讲解link:https://blog.csdn.net/zxyoi_dreamer/article/details/86761985

Code:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
inline int read(){
	int res=0,f=1;char ch=getchar();
	while(!isdigit(ch)) {if(ch=='-') f=-f;ch=getchar();}
	while(isdigit(ch)) {res=(res<<1)+(res<<3)+(ch^48);ch=getchar();}
	return res*f;
}
inline ll mul(ll a,ll b,ll mod){return (a*b-(ll)((long double)a/mod*b)*mod+mod)%mod;}
inline ll ksm(ll a,ll b,ll mod){ll res=1;for(;b;b>>=1) {if(b&1) res=mul(res,a,mod);a=mul(a,a,mod);}return res;}
inline ll labs(ll x){return x>0?x:-x;}
ll lgcd(ll a,ll b){return b==0?a:lgcd(b,a%b);}
void exgcd(ll a,ll b,ll &d,ll &x,ll &y){
	if(!b) {d=a,x=1,y=0;}
	else{
		exgcd(b,a%b,d,x,y);
		ll t=x;x=y;y=t-(a/b)*x;
	}
}
int main(){
	srand(10007);
	ll e,N,c,x,y,r,p,q,pri,i,k,D,d,f=1;
	cin>>e>>N>>c;
	while(f){
		i=1;k=2;x=rand()%(N-1)+1;y=x;
		while(1){
			++i;
			x=(mul(x,x,N)+pri)%N;
			if(x==y) break;
			d=lgcd(labs(x-y),N);
			if(1<d && d<N) {p=d;q=N/d;f=0;break;}
			if(i==k) {y=x;k*=2;}
		}
		pri--;
	}
	r=(p-1)*(q-1);
	exgcd(e,r,D,x,y);
	d=(x%r+r)%r;
	cout<<d<<" "<<ksm(c,d,N);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值