欧拉定理:
phi(n)为n的欧拉函数值,当n为质数时,n的欧拉函数值为n-1
降幂公式:
对于一个问题求 a^b %n
可以直接根据右边的条件把式子转换成上面三个中的一个
例题:
题目大意:求2^n%1e9+7结果,1<=n<=10^100000
题解:n很大,所以要用大数取模。p与2互质,所以2^n%p==2^(n%phi(p))%p,又因为p为质数,所以phi(p)=p-1,
那么 2^n mod p= 2^(x*(p-1)+n%(p-1)) mod p = 2^(n%(p-1)) mod p
大数取模求出n%(p-1) 然后快速幂就行了。
#include
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
char s[2000005];
ll quick(ll a, ll b) {
ll res = 1;
while (b) {
if (b & 1) res = (res*a) % mod;
b >>= 1;
a = (a*a) % mod;
}
return res;
}
int main() {
scanf("%s", s);
ll n = s[0] - '0';
ll MOD = mod - 1;
int len = strlen(s);
for (int i = 1; i < len; i++) {
n = (n * 10 + s[i] - '0') % MOD;
}
ll N = quick(2, n);
printf("%lld
", N);
}