欧拉定理:

2019012920123992.png

phi(n)为n的欧拉函数值,当n为质数时,n的欧拉函数值为n-1

降幂公式:

20190129201511166.png

对于一个问题求 a^b %n
可以直接根据右边的条件把式子转换成上面三个中的一个

例题:

题目大意:求2n%1e9+7结果,1<=n<=10100000

题解:n很大,所以要用大数取模。p与2互质,所以2n%p==2(n%phi§)%p,又因为p为质数,所以phi§=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<bits/stdc++.h>
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", N);
}