簡單快速冪求模分析(C語言) 撞桿子的CC學姐

2021-10-02 06:30:38 字數 1145 閱讀 7464

問題 c: 撞桿子的cc學姐

描述17級學姐中有個學姐,人稱撞桿子的cc,因為cc學姐走路的時候總是在低頭玩手機,所以經常撞桿子,在一次把鼻子撞破後,cc學姐在想自己出一次門究竟要撞多少個桿子。一天cc學姐打算去廣場玩,已知cc學姐走完全程共撞n次桿子,cc學姐第一次撞桿子時是走了1公尺的時候,每次撞完桿子後潛意識都會改變自己的小心程度,即第i次撞桿子後經過2i % 107公尺後會撞下乙個桿子,現在cc學姐想知道自己走了多遠。

格式輸入格式

輸入乙個n(1 <= n <= 10^5),cc學姐走完全程要撞的桿子數量

輸出格式

輸出乙個s,cc學姐走完全程所走的距離

樣例樣例輸入 copy13

4樣例輸出 copy17

15 提示

多組測試資料,請在輸入時迴圈輸入到檔案尾,共700組資料,請控制程式執行時間

解釋:假如算乙個2的十次方,暴力方法就是定義乙個變亮,迴圈十次,這樣的時間複雜度為o(n).而快速冪則不一樣,步驟如下:

2的十次方,十是偶數,只要慢慢擴大原本的數即可,如(先**):

#include #include long long mode(long long a, long long b, long long mo)  //如果只求冪結果便只要a和b,反之則需a,b,mo

return sum;

}main()

printf("%lld\n",sum);}}

return 0;

}

第乙個迴圈:本是2^10,因為是2的5*2次方,既是4的5次方,所以原數成了4

第二個迴圈:因為5次方是奇數,所以把多餘的乙個放進sum(sum=4),然後繼續變成16的2次方,因為5/2=2跟4/2=2無區別(整型資料相處結果還是整數),所以不影響迴圈(這個往後可以看做奇數次方開始)

第三個迴圈:2是偶數,所以繼續變成256的1次方

第四個迴圈:1%2==1,所以把256乘進sum裡面,因為sum本已經是4,所以最後sum=256x4=1024,然後1/2=0,所以結束迴圈,再然後返回sum即是答案(忽略求模即是1024,要求模便模)

數字式:

原:2^10

1、4^5

2、16^2x4

3、256^1x4

4、1024(如果模便用1024模)

C語言快速冪及快速冪的模

未學習快速冪時我們的冪 power 運算一般都是通過for,while迴圈來進行的如 int power int a,int n 這樣其時間複雜度為o n 十分浪費時間。這時如果我們使用快速冪其時間複雜度將降到o logn 我們的運算效率將大大提公升。那麼我們要怎麼樣進行快速冪運算呢?快速冪演算法是...

C 使用string的大數快速模冪運算(6)

專案要點 1.大數指的是遠超long long int的資料 2.將大數用矩陣進行儲存,並通過矩陣實現運算 3.本人採用字串進行儲存,應注意char的特點 比如 char a 161 cout 此時會輸出 95,而不是161,char型別首個位元位是作為正負號的 模冪快速演算法 a,m為正整數,將m...

C 不用遞迴,寫出快速求冪的程式

剛解完2.15這道題 c 證明x的62次方可以只用8次乘法算出 往下看就發現了這個,直接貼上我解2.15這道題的時候的出現的一種解法就行了,而且演算法恰好滿足2.16和2.17的要求。程式如下 used用來累計使用乘法的次數 include include define number 2 defin...