1. 程式人生 > >018 ACM/ICPC 焦作賽區網路賽

018 ACM/ICPC 焦作賽區網路賽

G :

我推出來的公式是 n^0+(n-1)^1+(n-2)^2 +........+1^(n-1)

這樣的結果是對的,然而不知道怎麼化簡成 2^(n-1)形式.....

 然後就是用費馬小定理來縮小n了

大數取模的時候要取模mod-1!老是忘記...

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include <functional>
using namespace std;
typedef long long int LL;

//	freopen("E:/input/ceshi.txt", "r", stdin);

#define mes(a,b) meset(a,b,sizeof(a))
#define rep(i,l,r) for(int i=l;i<=r;++i)
#define per(i,r,l) for(int i=r;i>=l;--i)
#define lowbit(x) x&(-x)

const int maxn = 1e6+300;
const int mod = 1000000007;
const int INF = 0x3f3f3f3f;


LL qumod(LL a,LL b)
{
  LL c=1;
  while(b){
    if(b&1)
    {
      c=(c*a)%mod;

    }
    a=a*a%mod;
    b>>=1;
  }
  return c;
}


int main() {

  int t;
  char a[100006];
  cin>>t;
  while(t--)
  {
    LL ans=0;
    cin>>a;
    int len=strlen(a);
    for(int i=0;a[i];i++)
    {
      ans=(ans*10+(a[i]-'0'))%(mod-1);
    }
    cout<<(qumod(2,ans-1))%mod<<endl;
  }
  return 0;
}