欧拉降幂

2019-04-14 20:08发布

欧拉定理: 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); }