求离散对数 用的是小步大步算法 也就是babystep 算法结合hash 来处理的
#include <iostream>
#include<cstdio>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
#define maxn 65535
struct hash
{
int a,b,next;
} Hash[maxn*2];
int flg[maxn+66];
int top,idx;
void ins(int a,int b)
{
int k=b&maxn;
if(flg[k]!=idx)
{
flg[k]=idx;
Hash[k].next=-1;
Hash[k].a=a;
Hash[k].b=b;
return;
}
while(Hash[k].next!=-1)
{
if(Hash[k].b==b)
return;
k=Hash[k].next;
}
Hash[k].next=++top;
Hash[top].next=-1;
Hash[top].a=a;
Hash[top].b=b;
}
int find(int b)
{
int k=b&maxn;
if(flg[k]!=idx)
return -1;
while(k!=-1)
{
if(Hash[k].b==b)