Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #define Nmax 11
- #define MOD 1000000007
- using namespace std;
- int c[2][Nmax];
- int P(int a,int b) /// a^b modulo (ridicare la putere logaritmic)
- {
- if(b==0)
- return 1;
- else
- if(b%2==0)
- return P((a*a)%MOD,b/2);
- else
- return a*P((a*a)%MOD,b/2)%MOD;
- }
- void pdcomb(int n) /// Calculez combinarile dinamic si folosesc doar doua linii (0 si 1)
- {
- c[0][0]=c[1][0]=1; /// coloana 0
- for(int i=1;i<=n;++i)
- {
- for(int j=1;j<=i;++j)
- c[1][j]=(c[0][j]+c[0][j-1]); /// Calculez linia 1
- for(int k=0;k<=i;++k) /// Mut linia 1 in linia 0
- c[0][k]=c[1][k];
- }
- }
- int main()
- {
- int n,m,k;
- unsigned long int C=0;
- cin>>n;
- pdcomb(n);
- while(n--)
- {
- cin>>m>>k;
- /// pdcomb(k);
- /* for(int i=0;i<=k;++i)
- {
- C=C+c[1][i]*P(k-2*i,m);
- if(C>=MOD)
- C=C%MOD;
- }
- cout<<C/(1<<(k-1))<<'\n';*/
- if(k==1)
- cout<<1<<'\n';
- else
- if(k==2)
- cout<<P(2,m-1)<<'\n';
- else
- {
- int DlaK=1<<(k-1);
- C=1ULL*((P(k,m)+DlaK-1)/DlaK)%MOD;
- cout<<C<<'\n';
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement