Leo的次冪運算 演算法筆記

2021-09-23 17:10:45 字數 1515 閱讀 8047

題目描述:

leo是某個人的粉絲,所以她很喜歡7這個數字。

這天她心血來潮,想對7進行次冪運算。

leo又是個想法獨特的人,她想對7進行無數次冪運算,即計算7(7(77(…7)))

即如圖所示,假設圖中有無數個7

但是這樣很顯然,得到的是乙個很大的數字,所以請你把這個數字對p取模,並告訴她結果。

輸入:
第一行為數字t,表示有t組資料 (t<=1000)

接下來的t行,每行給出乙個數字p,表示取模的數字。(p<=1e7)

輸出:
每組資料輸出一行,表示7的無數次冪對p取模後的數字。

樣例輸入:
2

1234

5678

樣例輸出:
327

471

這個題首先想到的是快速冪,但奈何資料太大,快速冪也拯救不了。搜尋一下有關題目,發現有一種尤拉降冪的東西可以用。至於為什麼要這麼用,我也不知道,反正能解決問題。這裡有尤拉函式的兩種求法:知道了尤拉降冪這個定理後,這題就非常容易了。

尤拉降冪公式

參考**

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

#define inf 0x3f3f3f

#define ll long

long

#define clean

(arrays)

memset

(arrays,0,

sizeof

(arrays)

)//快速冪演算法

ll quick_pow

(ll a, ll b, ll mod)

base = base * base % mod;

b >>=1;

}return ans;

}//尤拉函式直接篩選

long

long

direct_phi

(long

long x)}}

if(x >1)

return ans;

}ll dfs

(ll x)

intmain()

return0;

}

快速冪(冪運算取模的logn演算法)

以下以求a的b次方來介紹 把b轉換成二進位制數 該二進位制數第i位的權為 例如11的二進位制是1011 11 2 1 2 0 2 1 2 1 因此,我們將a 轉化為算 對於 令a 0 a 2 0 1 a 1 a 2 1 1 a 2 a 2 2 0 a 3 a 2 3 1 可以看出a n 的前半部分是...

演算法訓練 2的次冪表示

演算法訓練 2的次冪表示 時間限制 1.0s 記憶體限制 512.0mb 問題描述 任何乙個正整數都可以用2進製表示,例如 137的2進製表示為10001001。將這種2進製表示寫成2的次冪的和的形式,令次冪高的排在前面,可得到如下表示式 137 2 7 2 3 2 0 現在約定冪次用括號來表示,即...

演算法訓練 2的次冪表示

問題描述 任何乙個正整數都可以用2進製表示,例如 137的2進製表示為10001001。將這種2進製表示寫成2的次冪的和的形式,令次冪高的排在前面,可得到如下表示式 137 2 7 2 3 2 0 現在約定冪次用括號來表示,即a b表示為a b 此時,137可表示為 2 7 2 3 2 0 進一步 ...