题解思路:
其实第n项就是2^(n-1)+2^(n-3)+2^(n-5)---那么他就是奇项和或偶项和就是(2^n-1)/3*2+(2^n-1)%3,这里使用快速幂的时候就对3*m取模,然后最后的结果再对m取模就不会出错了。
代码:
#include <cstdio>
#include<iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
#include<vector>
typedef long long ll;
ll n,m;
ll kuaisu(ll x,ll y)
{
ll ans = 1;
while(y){
if(y&1) ans = ans*x%m;
y >>= 1;
x = x*x%m;
}
return ans;
}
int main()
{
while(~scanf("%lld%lld",&n,&m))
{
m *= 3;
ll ans = (kuaisu(2,n)-1+m)%m;
ll cnt = ans / 3;
cnt = cnt*2+(ans%3);
m /= 3;
printf("%lld\n",cnt%m);
}
return 0;
}