Discrete Logging
Time Limit: 5000MS   Memory Limit: 65536K
Total Submissions: 5120   Accepted: 2319

Description

Given a prime P, 2 <= P < 231, an integer B, 2 <= B < P, and an integer N, 1 <= N < P, compute the discrete logarithm of N, base B, modulo P. That is, find an integer L such that

    B

L

 == N (mod P)

Input

Read several lines of input, each containing P,B,N separated by a space.

Output

For each line print the logarithm on a separate line. If there are several, print the smallest; if there is none, print "no solution".

Sample Input

5 2 1
5 2 2
5 2 3
5 2 4
5 3 1
5 3 2
5 3 3
5 3 4
5 4 1
5 4 2
5 4 3
5 4 4
12345701 2 1111111
1111111121 65537 1111111111

Sample Output

0
1
3
2
0
3
1
2
0
no solution
no solution
1
9584351
462803587

思路:baby_step,giant_step算法模板题

  1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<stdlib.h>
5 #include<queue>
6 #include<vector>
7 #include<math.h>
8 #include<string.h>
9 #include<map>
10 #include<set>
11 using namespace std;
12 typedef long long LL;
13 LL mod[65539];
14 bool judge(LL n)
15 {
16 LL ac=sqrt(1.0*n);
17 if(ac*ac==n)
18 return true;
19 else return false;
20 }
21 map<LL,LL>my;
22 set<LL>que;
23 set<LL>::iterator it;
24 LL quick(LL n,LL m,LL p);
25 LL gcd(LL n,LL m)
26 {
27 if(m==0)
28 return n;
29 else return gcd(m,n%m);
30 }
31 pair<LL,LL>Pc(LL n,LL m)
32 {
33 if(m==0)
34 return make_pair(1,0);
35 else
36 {
37 pair<LL,LL>N=Pc(m,n%m);
38 return make_pair(N.second,N.first-(n/m)*N.second);
39 }
40 }
41 typedef struct pp
42 {
43 LL x;
44 LL id;
45 } ss;
46 ss table[655390];
47 ss tt[655390];
48 bool cmp(pp p,pp q)
49 {
50 if(p.x==q.x)
51 return p.id<q.id;
52 return p.x<q.x;
53 }
54 int main(void)
55 {
56 LL P,B,N;
57 while(scanf("%lld %lld %lld",&P,&B,&N)!=EOF)
58 {
59 bool a=judge(P);
60 LL ask=sqrt(1.0*P);
61 if(!a)
62 ask+=1;
63 int i,j;
64 mod[0]=1;
65 int vv=0;
66 table[0].id=0;
67 table[0].x=1;
68 int cn=1;
69 for(i=1; i<=ask; i++)
70 {
71 mod[i]=mod[i-1]*B%P;
72 table[i].id=i;
73 table[i].x=mod[i];
74 }
75 sort(table,table+ask+1,cmp);
76 tt[0].id=table[0].id;
77 tt[0].x=table[0].x;
78 LL yy=tt[0].x;
79 for(i=1;i<=ask;i++)
80 {
81 if(table[i].x!=yy)
82 {
83 yy=table[i].x;
84 tt[cn].x=yy;
85 tt[cn].id=table[i].id;
86 cn++;
87 }
88 }
89 int fl=0;
90 LL ack;
91 LL nn=quick(B,P-2,P);
92 nn=quick(nn,ask,P);
93 LL ni=1;
94 for(i=0; i<=ask; i++)
95 {
96 LL ap=ni*N%P;
97 ni%=P;
98 int l=0;
99 int r=cn-1;
100 LL ic=-1;
101 while(l<=r)
102 {
103 int mid=(l+r)/2;
104 if(tt[mid].x>=ap)
105 {
106 ic=mid;
107 r=mid-1;
108 ack=tt[ic].id;
109 }
110 else l=mid+1;
111 }
112 if(ic!=-1&&tt[ic].x==ap)
113 {
114 //printf("%lld\n",table[ic].x);printf("%d\n",i) ;
115 fl=1;
116 break;
117 }
118 ni=(ni*nn)%P;
119 }
120 if(!fl)
121 printf("no solution\n");
122 else printf("%lld\n",ack+(LL)i*ask);
123 }
124 return 0;
125 }
126 LL quick(LL n,LL m,LL p)
127 {
128 n%=p;
129 LL ans=1;
130 while(m)
131 {
132 if(m&1)
133 {
134 ans=ans*n%p;
135 }
136 n=n*n%p;
137 m/=2;
138 }
139 return ans;
140 }

Discrete Logging(poj2417)的更多相关文章

  1. Discrete Logging(POJ2417 + BSGS)

    题目链接:http://poj.org/problem?id=2417 题目: 题意: 求一个最小的x满足a^x==b(mod p),p为质数. 思路: BSGS板子题,推荐一篇好的BSGS和扩展BS ...

  2. POJ2417 Discrete Logging【BSGS】

    Discrete Logging Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 5577   Accepted: 2494 ...

  3. [POJ2417]Discrete Logging(指数级同余方程)

    Discrete Logging Given a prime P, 2 <= P < 2 31, an integer B, 2 <= B < P, and an intege ...

  4. POJ 2417 Discrete Logging (Baby-Step Giant-Step)

    Discrete Logging Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 2819   Accepted: 1386 ...

  5. 【BSGS】BZOJ3239 Discrete Logging

    3239: Discrete Logging Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 729  Solved: 485[Submit][Statu ...

  6. poj 2417 Discrete Logging ---高次同余第一种类型。babystep_gaint_step

    Discrete Logging Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 2831   Accepted: 1391 ...

  7. BSGS算法+逆元 POJ 2417 Discrete Logging

    POJ 2417 Discrete Logging Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 4860   Accept ...

  8. 【BZOJ3239】Discrete Logging BSGS

    [BZOJ3239]Discrete Logging Description Given a prime P, 2 <= P < 231, an integer B, 2 <= B ...

  9. Discrete Logging

    Discrete Logging Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 5865   Accepted: 2618 ...

随机推荐

  1. 简述安霸pipeline及其关键参数--raw域模块

    何为pipeline: sensor输出是一种叫Bayer 格式的RAW数据图像.ISP 对RAW数据图像的处理流程就是我们说的ISP PipeLine.通过PipeLine的处理,我们可以从一副RA ...

  2. Webpack 打包 Javascript 详细介绍

    本篇我们主要介绍Webpack打包 Javascript.当然,除了可以打包Javascript之外,webpack还可以打包html.但是这不是我们本篇的重点.我们可以参考 Webpack HTML ...

  3. c#表格序号列

    <asp:BoundField HeaderText="序号" /> OnRowCreated="gridview_RowCreated" prot ...

  4. flink-----实时项目---day04-------1. 案例:统计点击、参与某个活动的人数和次数 2. 活动指标多维度统计(自定义redisSink)

    1. 案例 用户ID,活动ID,时间,事件类型,省份 u001,A1,2019-09-02 10:10:11,1,北京市 u001,A1,2019-09-02 14:10:11,1,北京市 u001, ...

  5. JVM——对象已“死”的判定

    主要针对Java堆和方法区 1.判断对象是否已"死" Java堆中存放着几乎所有的对象实例,垃圾回收器在对堆进行回收之前,首先应该判断这些对象哪些还"存活",哪 ...

  6. Spring Boot中使用Redis

    一.定义工程 创建一个spring boot模块 二.修改pom文件 在pom文件中添加Spring Boot与Redis整合依赖 <dependencies> <!--spring ...

  7. 如何使用pycharm克隆阿里云项目

    我们回到PyCharm刚打开时的界面,如图1-1所示:   点击"Check out from Version Control" => "Git",如图1 ...

  8. 走进Spring Boot源码学习之路和浅谈入门

    Spring Boot浅聊入门 **本人博客网站 **IT小神 www.itxiaoshen.com Spring Boot官网地址:https://spring.io/projects/spring ...

  9. jQuery选择器整理+知识总结

    jQuery选择器 没有不会遗忘的知识,还是做个总结吧! 一.基本分类 jQuery选择器大致可以分为两类,基本选择器和过滤选择器,总体结构体系如下:   二.基本选择器 基本选择器又可以分为三种,分 ...

  10. Mysql状态信息查询

    目录 一.连接相关 二.show status 三.其它 一.连接相关 查看连接线程相关的系统变量的设置值 show variables like 'thread%'; 查看系统被连接的次数 show ...