Poj2417 大步小步演算法

2021-07-09 11:53:45 字數 1279 閱讀 8964

poj2417

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 bl

=n(modp)

。我們設l=

kt−m

,其中t=

⌊l−−

√⌋,0

<=

m<

t 。那麼bl

=n(modp)

就等價於bk

t−m=

n(modp

) 即bk

t∗n−

1=bm

(modp)

。我們可以先預處理出所有的bi

(0<=

i記錄在乙個hash表裡,然後列舉k,計算bk

t∗n−

1 的值,在hash表裡找是否有符和條件的m,若有則k∗

t−m 就是答案之一。所有答案中取最小的乙個即可。這就是大步小步演算法。

**:

#include

#include

#include

#include

#include

using namespace std;

#define inf 1000000007

#define mo 1000007

typedef long long ll;

struct nodehash[1000000];

ll t,m,k,p,a,b,x,y,first[mo+1],tot,ans;

void insert(ll x,ll m)

void find(ll x,ll k)

}ll power(ll a,ll b,ll p)

return tmp;

}int main()

ans=inf;

x=power(a,t,p); y=1;

for(k=0;k<=t;k++)

if(ans==inf)puts("no solution");

else

printf("%lld\n",ans);

}return

0;}

uva 11916 大步小步演算法

uva11916 emoogle grid rujia liu include include include include includeusing namespace std const int mod 100000007 const int maxb 500 10 int n,m,k,b,r...

運維創新一小步 企業騰飛一大步

為何要創新運維 目前國內企業都已經形成一定的資訊化規模,不過,隨著資訊化建設的深入,各企事業單位的it系統日趨複雜,品牌繁多 數量眾多的網路裝置 伺服器 中介軟體 業務系統等讓it管理員難以從容應對,即使加班加點的管理 也經常會因裝置出現故障而導致業務的中斷,嚴重影響運維的正常運轉。在企業裡,it部...

運維創新一小步 企業騰飛一大步

為何要創新運維 目前國內企業都已經形成一定的資訊化規模,不過,隨著資訊化建設的深入,各企事業單位的it系統日趨複雜,品牌繁多 數量眾多的網路裝置 伺服器 中介軟體 業務系統等讓it管理員難以從容應對,即使加班加點的管理 也經常會因裝置出現故障而導致業務的中斷,嚴重影響運維的正常運轉。在企業裡,it部...