fzu 1493 小步大步攻击算法
来源:互联网 发布:毒品网络 百度云 编辑:程序博客网 时间:2024/06/06 11:00
题目:http://acm.fzu.edu.cn/problem.php?pid=1493
题目大意:a^x = b (mod c) 已知abc,求x ( a,b,x < c
考点:小步大步攻击算法。
思路:要在[0,c]内求x,只能枚举,但是暴力的枚举肯定会超时,于是我们做一个等价的替换, 下面是过程
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Step 1 :令m = ceil(sqrt(c));
Step 2 :等价替换
Step 3 :j = 0 -> m 将(j,
Step 4 :i = 0 -> m 令temp = a ^ m ^ i mod c
其中temp,b, c都是已知的,可利用扩展欧几里德求解y
在HASH表中查找y是否存在,若存在则x = i * m + HASH(y). j
Step 5 :若查找到了y,这有解, 若查找不到, 则无解
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
上面做的等价替换,目的是把O(n)的时间复杂度降低到O().使得枚举的长度减少了一半
提交情况:time limit error 10次
收获:了解个小步大步攻击算法的思路,学会了按位与的hash方法(和取模时间一样)
经验:不能盲目编码,注意一些可以优化的地方。要理解每个过程的原理
AC code
#include <stdio.h>
#include <math.h>
#include <string.h>
#define MAXN 65535
#define I64 __int64
struct LINK{
}HASH_LINK[MAXN];
I64 head[MAXN], ad;
void clear(){
}
I64 hash(I64 n){
}
void insert(I64 j, I64 data){
}
I64 POWER_MOD(I64 a, I64 b, I64 c){
}
I64 Ext_Gcd(I64 a, I64 b, I64 &x,I64 &y){
}
I64 babystep_giantstep(I64 a, I64 b, I64c){
}
int main(){
}
- fzu 1493 小步大步攻击算法
- 大步小步攻击算法_完全版
- Shank大步小步算法
- Poj2417 大步小步算法
- 浅谈大步小步算法
- hdu2815扩展小步大步攻击
- 大步小步算法 (BSGS算法)
- POJ 2417 大步小步算法
- POJ 3243 大步小步算法
- uva 11916 大步小步算法
- uva 11916 - Emoogle Grid(大步小步算法)
- BSGS算法学习小记(大步小步算法)
- fzu 1759 A^B % C
- (扩展)大步小步算法练习 bzoj3239;bzoj2480&bzoj1467
- 大步小步算法(BSGS)及扩展 & bzoj 2480
- poj 2417 小步大步算法+费马小定理求逆元
- hdu 2815 大步小步
- 【bzoj2480】Mod 扩展大步小步
- poj3696 欧拉函数, 欧拉方程
- 编写 android.mk 中 LOCAL_C_INCLUDES 的技巧
- fzu 1759 A^B % C
- BP神经网络参数设置及实例
- 衡阳八中 1856 数论 C(n,m) % p
- fzu 1493 小步大步攻击算法
- hdu2815扩展小步大步攻击
- poj1006 中国剩余定理
- poj2447 RSA公钥加密破译
- 2011年03月21日的日记
- activemq-jms --zhuanzai
- poj2406 KMP算法
- poj1961 KMP
- AC自动机(确定性有限状态自动机)