描述 Tony最近喜欢上了龙之谷游戏,所以他想叫上他的好友组建一个公会来一起享受这款游戏。
Tony一共有n个好友,他可以叫上任意k(1<=k<=n)个好友来组建公会,并且所有好友都会答应他的请求。问Tony一共可以有多少种方案组建这个公会?
只要不是完全相同的人组建的方案视为不同方案,并且Tony至少要叫上一个人。
描述 多组输入,每组一行,输入一个正整数n(1<=n<=1000000000)。
输出 每组输出一行,输出方案数。(对1000000007取膜)
样例输入 2
样例输出 3
思路:首先由题目分析知道,方案数是 C(n,1)+C(n,2)+…+C(n,n),第一时间想到的是pow(2,n)-1;但是由于n的范围是(1<=n<=1000000000),所以用pow不但慢而且会溢出。 再一想直接用快速幂的模板就好。
快速幂模板,表示a的b次方对p取模
int fast(int a,int b,int p) { long long a1=a,t=1; while(b>0) { if(b&1) t=(t%p)*(a1%p)%p; a1=(a1%p)*(a1%p)%p; b/=2; } return (int)(t%p); }
