添加好友
时间限制: 1000ms 内存限制: 128M
Tony最近喜欢上了龙之谷游戏,所以他想叫上他的好友组建一个公会来一起享受这款游戏。
Tony一共有 n 个好友,他可以叫上任意 k ( 1<=k<=n )个好友来组建公会,并且所有好友都会答应他的请求。问Tony一共可以有多少种方案组建这个公会?
只要不是完全相同的人组建的方案视为不同方案,并且Tony至少要叫上一个人。
每组输出一行,输出方案数。(对1000000007取模)
2
3
思路
从n个人中选择,可以选一个,两个,三个等等,因此方法总数为
解题代码
#include<iostream>
using namespace std;
#define mod 1000000007
#define __int64 long long
__int64 qp(__int64 a,__int64 b,__int64 c)
{
__int64 ans=1;
while(b)
{
if(b&1)
ans=ans*a%c;
b>>=1;
a=a*a%c;
}
return ans;
}
int main()
{
__int64 n;
while(scanf("%lld",&n)!=EOF)
printf("%lld\n",qp(2,n,mod)-1);
return 0;
}
快速幂算法
时间复杂度:O(logn)
代码
int quickpow(int a,int b,int mod)//a为底数,b为指数
{
int ans=1;
while(b)
{
if(b&1) //判断指数是否为奇数
ans=ans*a%mod;
b>>=1; //右移1位,相当于b/=2;
a=a*a%mod;
}
return ans;
}