題目描述:
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 進一步 ...