10^100000 不是100000 看好数据范围
使用字符串存输入
题意:
不定量个正整数相加得n
1:1
2:2
3:4
4:8
归纳可得:2^n-1
也可:
C(n,0)+C(n,1)+C(n,2)+.+C(n,n)=2^n
费马小定理(降幂)
如果p是一个质数,而整数a不是p的倍数,则有a^(p-1)≡1(mod p)
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<string>
using namespace std;
typedef unsigned long long ll;
ll r = 1e9+7;
ll quick_mul(ll a,ll b,ll r){
ll ans = 0;
while(b){
if(b&1)
ans = (ans+a) % r;
a = (a+a)%r;
b >>= 1;
}
return ans;
}
ll quick_pow(ll a,ll b,ll r){
ll ans = 1;
while(b){
if(b&1)
ans = quick_mul(ans,a,r) % r;
a = quick_mul(a,a,r) % r;
b >>= 1;
}
return ans;
}
int main(){
string s;
while(cin >> s){
ll n = 0;
ll len = s.size();
for(int i=0; i<len; i++){
n = (n*10 + s[i]-'0') % (r-1);
}
n = (n-1+(r-1))%(r-1);
cout << quick_pow(2,n,r) << endl;
}
return 0;
}