1. 程式人生 > >【快速冪公式】“盛大遊戲杯”第15屆上海大學程式設計聯賽夏季賽暨上海高校金馬五校賽-新增好友

【快速冪公式】“盛大遊戲杯”第15屆上海大學程式設計聯賽夏季賽暨上海高校金馬五校賽-新增好友

新增好友

時間限制: 1000ms   記憶體限制: 128M

Tony最近喜歡上了龍之谷遊戲,所以他想叫上他的好友組建一個公會來一起享受這款遊戲。

Tony一共有n個好友,他可以叫上任意k1<=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;
}