费马小定理+插板法 - Sum(HDU4704)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_42557561/article/details/100063591

传送门


Analysis

绝对是题目描述的问题
注意:
在这道题中 1 + 1 + 2 = 4 1+1+2=4 1 + 2 + 1 = 4 1+2+1=4 是两种不同的方案
2 + 2 = 4 2+2=4 2 + 2 = 4 2+2=4 只能算一种
所以不算球盒问题那八类中的任何一类
直接插板法思考即可
将n看作n个1,那么有n-1个板子,每个板子都有选和不选两种方法
a n s = 2 n 1 ans=2^{n-1}
由于N很大而P又是质数
用费马小定理降幂即可
a n a^n\equiv a n m o d ( p 1 ) a^{n mod (p-1)} (mod p)

Code
#include<bits/stdc++.h>
#define re register
using namespace std;
typedef long long ll;
char st[100009];
const int P=1e9+7;
inline ll ksm(ll x,ll b){
	ll res=1;
	while(b){
		if(b&1) res=res*x%P;
		x=x*x%P;
		b>>=1;
	}
	return res;
}
int main(){
	while((scanf("%s",st))!=EOF){
		int len=strlen(st);
		ll idx=0;
		for(re int i=0;i<len;++i)
			idx=(idx*10+st[i]-'0')%(P-1);
		idx=((idx-1)%(P-1)+(P-1))%(P-1);
		printf("%lld\n",ksm(2,idx));
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_42557561/article/details/100063591