1. 程式人生 > >CH0102 64位整數乘法 數論 (待補充QAQ

CH0102 64位整數乘法 數論 (待補充QAQ

正解:數論or一個神仙想法

解題報告:

兩種方法,都還挺妙的就都寫了qwq

第一種是快速冪

把b用二進位制表示成,ck*2k+ck-1*2k-1+...+c0*20

然後就可以表示成,a*(ck*2k+ck-1*2k-1+...+c0*20)%p

然後就可以用快速冪的思想做掉,能理解趴?

哦其實也可以用秦九韶理解,差不多,反正都這個意思就是了qwq

  放程式碼處qwq

第二種是一個,神仙想法

首先很容易能理解就是 a*b%p=a*b-⌊a*b/p⌋*p

然後就可以分成倆部分計算,一個是a*b直接算一個是⌊a*b/p⌋*p

首先理解一個東西,就是因為%p所以答案一定是小於等於p的,那麼溢位導致捨棄掉了的部分就沒有關係反正本來就是太大了要被廢掉的

然後另一個就是⌊a*b/p⌋*p,我們可以先開個double算出⌊a*b/p⌋,考慮精度不夠怎麼辦?沒有關係因為double有效數字就是18-19的樣子(,,,就是這麼巧,被出題人安排得明明白白×)所以捨棄掉的部分剛好就是我們不需要的部分

然後就歐克了

是不是很妙!!!

放程式碼處qwq

umm然後留下一個傻逼問題(,,,其實開始困擾了我半天來著×),這樣的

為什麼不可以直接算a*b%p呢?

這是因為!可能你舍掉了高位之後會有問題!能懂趴?然後用法二就可以巧妙避免這個問題!

好那這題就解決辣?

哦還要週末寫下程式碼把這題給做了然後把程式碼放上來qwq