洛谷 P4454 [CQOI2018]破解D-H协议

11人阅读 评论(0) 收藏 举报
分类:

题面

题意

给出四个数g,p,A,B,其中有a,b满足g^a%p=A,g^b%p=B.求g^(a*b)%p.

做法

首先a,b< p,可以发现只要求出a,b中的任意一个值即可得到答案,但如果暴力枚举a的话复杂度为O(p),显然过不了.
可以考虑分块,令k=sqrt(p),那么就可以得到如下等式:
a=u*p+v(u,v<=k)
所以g^(u *p) *g^v=A
移项得g^(u *p)=A *Inv(g^v)
因此可以预处理出Inv(g^v)(0<= v < k)的值,存到一个map中,然后暴力枚举u就可以求出a,其复杂度为O(sqrt(n)*log(n)).

代码

#include<iostream>
#include<cstdio>
#include<map>
#define ll long long
using namespace std;

ll g,M,A,B,T,sq;
map<ll,ll>mm;

inline ll po(ll u,ll v)
{
    ll res=1;
    for(;v;)
    {
        if(v&1) res=res*u%M;
        u=u*u%M;
        v>>=1;
    }
    return res;
}

inline void get()
{
    ll i;
    for(i=0;i*i<=M;i++)
    {
        mm[po(g,i)]=i;
    }
    sq=i-1;
}

int main()
{
    ll i,j,tmp;
    cin>>g>>M>>T;
    get();
    while(T--)
    {
        scanf("%lld%lld",&A,&B);
        for(i=0;;i++)
        {
            tmp=A*po(po(g,i*sq),M-2)%M;
            if(mm.count(tmp))
            {
                printf("%lld\n",po(B,i*sq+mm[tmp]));
                break;
            }
        }
    }
}
查看评论

CQOI2018 Day1 :破解D-H协议

CQOI Day1 :破解D-H协议 题目背景: 题目描述 输入输出格式 SAMPLE INPUT: SAMPLE OUTPUT: 分析: Code: 想了一想……emm……发现...
  • czl_233
  • czl_233
  • 2018-04-17 19:42:36
  • 8

DH Diffie-Hellman算法(D-H算法),密钥一致协议。

package com.ice.webos.util.security; import java.security.Key; import java.security.KeyFactory...
  • zlxfogger
  • zlxfogger
  • 2015-09-22 16:01:03
  • 1172

[BZOJ5296][CQOI2018]破解D-H协议(BSGS模板题)

5296: [Cqoi2018]破解D-H协议Time Limit: 10 Sec&amp;nbsp;&amp;nbsp;Memory Limit: 512 MBSubmit: 23&amp;nbsp...
  • Effervescence
  • Effervescence
  • 2018-04-17 19:28:29
  • 33

4522: [Cqoi2016]密钥破解

4522: [Cqoi2016]密钥破解 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 525  Solved: 262 [Submit][S...
  • CRZbulabula
  • CRZbulabula
  • 2016-12-26 13:29:47
  • 192

【CQOI2016】密钥破解

DescriptionSolution要求什么题目看起来挺复杂的,但是理一理思路,只有四个要求:1、能快速提取一个大整数的因数;2、会求逆元;3、会打快速幂;4、会打快速乘。 首先后面三个都是数论十...
  • doyouseeman
  • doyouseeman
  • 2016-04-20 22:07:48
  • 1128

[bzoj4522][CQOI2016]密钥破解

题目描述快速分解做pollard_rho算法后模拟题意。#include #include #include #define fo(i,a,b) for(i=a;i...
  • WerKeyTom_FTD
  • WerKeyTom_FTD
  • 2016-04-20 12:46:39
  • 638

【总结】CQOI2018爆炸记

Day0 各种模板都背得差不多了,下午去看了考场,路上教练说可能我们最近OI赛制的比赛打得很少,估计会有影响,要多注意。(flag高高悬起) 听LJH大爷,码了一发FFT一发NTT让这俩货对拍,键...
  • qq_34454069
  • qq_34454069
  • 2018-04-16 14:45:59
  • 122

CQOI2018 总结!

省选挂掉,北大一本线飞了。。。 Day0 重邮终于换考场了,在一个奇怪的二维码大楼,然而电脑没换。。我电脑居然跑得超慢,A+B编译一分钟,右键菜单卡半分钟,打字更不上我的速度。。。什么垃圾电脑...
  • can919
  • can919
  • 2018-04-15 16:53:44
  • 148

[Cqoi 2018] bzoj5301 异或序列 [莫队]

Description: 已知一个长度为nnn的整数数列a[1],a[2],…,a[n]a[1],a[2],…,a[n]a[1],a[2],…,a[n],给定查询参数l、rl、rl、r,问在 [l,...
  • pocket_lengend
  • pocket_lengend
  • 2018-04-17 10:17:38
  • 69

深入SSL协议的规范和运作原理

1、概述  安全套接层(Secure Socket Layer, SSL)协议是 Netscape 公司于 1994 年提出的一个网络安全通信协议,是一种在两台机器之间提供安全通道的协议。它具有保护传...
  • wolfzone025
  • wolfzone025
  • 2011-03-03 13:28:00
  • 8787
    个人资料
    持之以恒
    等级:
    访问量: 1万+
    积分: 2047
    排名: 2万+
    文章存档
    最新评论