1樓:匿名使用者
解決這個問題要考慮以下幾點:
1, n >= 0時和n < 0時。
2,如果2^n的結果過大,即是一個變數儲存不下時該怎麼辦?
3,如何快速計算出2^n,使得演算法效率提高。
解答上訴問題:
1,當n < 0時,2^n為浮點數,而浮點數對%(取模運算)無效,所以不考慮。
2,當n >= 0 時,2^n即是將正整數2(其二進位制表示為10)左移n位。
3,n太大時,左移超出變數能表達的最大值,這時該怎麼辦?
給出取模運算的性質,a ^ b % p = ((a % p)^b) % p。
那麼當n太大時,可以考慮將n拆成n1 + n2。
有2^n % p = ((2^n1 % p)^n2) %p。
這樣就能解決n過大的問題了。
我只能給你思路,希望你能自己寫出滿意的**。
2樓:潮汐之湧動
思路:一直乘上2是十分耗時的,但是用另一種方法,比方說求某個數的64次方,那麼只要某個數的32次方乘以這個數的32次方就行了,說白了就是某個數的32次方自乘,這樣只需計算一次,而不用乘上2三十二次這種耗時的計算。實現方法可用上遞迴,當然不遞迴也行。
若57,分為28與29,28可分為14自乘,29為14乘15,這時更可以設一個陣列作備忘錄,即計算28的14自乘時把14次方的結果儲進陣列裡(每計出某個次方值時都儲進去),然後下次用時先看一看陣列有沒有存,比如29裡的14乘15,因為14次的之前已經計出結果,所以直接取出,而不用再次把14分成7自乘
c++的程式超時,怎麼辦? 5
3樓:旅春冬
需要效能調優,解決方案有以下幾個:
1、最直接的是重新採用新的演算法編寫,如果是一個專案,則需要考慮架構設計的調整。
2、間接的話,使用效能監視器(計時),檢視軟體的最耗時部分,根據2-8有原則,20%的**消耗80%的時間。然後調優效能瓶頸的那段**。
一道c語言題目,我的**超時了,,,怎麼破???
4樓:磯禈嘗矙
隨輸入 同時排序, 只保留前m個結果也就是說 對n-m部分不做排序 可以簡化演算法就是, 初始陣列為空, 元素為0個前m個資料, 按順序插入到陣列中。 超過m的資料, 從後向前比較, 如果比最後一個大,直接拋棄否則插入到對應位置,拋棄當前最後一個。一道c語言題目,我的**超時了,,,怎麼破???
一道超時的c++問題,求大神提供處理方法
5樓:匿名使用者
老大,10^n在n很大的時候,比如上限100000時是個什麼概念?1後邊有10萬個0, 假設cpu的執行++的速度是10g,也就是10*10^9=10^10, 則要計算完需要10^(100000-10)秒,一年才不到4*10^7,所以在宇宙湮滅之前都不要想算完啦。
當然,按你的**還不至於老是執行不完,原因是在c*=a時當n>10時會多次溢位。
得改演算法:
注意到1+2+...+n=n(n+1)/2
當n=10^k時, n(n+1)/2= 5*10^(k-1)*(10^k+1)
以數位的形式來看: 50...050...0, 即結果中的各位上只有0和5,且5只出現兩次,並將0分割為兩半,兩半0的個數一樣,都為k-1個。
因此對本題無需計算,直接輸出即可,不過要注意當輸入的n=0時,需要輸出的是1,不滿足之前討論。
請問這道題目算對了嗎,請問這道英語題目做對了嗎?
sunny習慣就行 沒有做對,你的數學基礎運算不關,正確解法如圖所示,先直接代進去,得到二元二次方程,這裡比較特殊,是可以用二元一次方程的解法,解方程就行了,最後得到的a是簡單複數,你的數學學到這裡了沒? 解 因為f x 1 ax 2,所以f 1 1 a 1 2 1 a f 2 1 a 2 2 1 ...
這道極限的題目怎麼求,請問這道題的極限怎麼求
洛必達法則只有在特定的情況下才可以用哦。不是全部的都可以用洛必達 把n看作連續變數,也可以用洛必達法則求解 牽曉星 極限的題目一般人都不會做的,只有求助於導師了。 哪道極限題目怎麼求,求目的明確,表述清楚 聽不清啊 當n趨於無窮大時,原式的分子和分母都各自趨於無窮大,所以,本題是適用羅必塔法則的。原...
請問這個c語言題目怎麼寫
include int main int num,m,n,s,a 13 scanf d num n num 100 m num 100 100 while m n a m s n 7 6 7 if s 0 s 7 printf d s return 0 執行示例 include stdio.h in...