フェルマーの小定理+フラッパー法 - 合計(HDU4704)

免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/weixin_42557561/article/details/100063591

ポータル


分析

確かに問題のトピックはで説明
注:
この問題のでは 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 だけ考えることができる
の任意のクラスの8つのボールボックスクラスそれほど問題ではない
直接フラッパー法の考え方をすることができます
し、ボードがあり、n個のn-1のように見える、n-1のこと、各ボードには、選択していると2つのメソッドをオフにします
A n個 S = 2 n個 - 1 年= 2 ^ {N-1}
による大規模なNへとPは素数で
降順にフェルマーの小定理と
A n個 ^ n個\当量 A n個 メートル インクルード D P - 1 ^ {N MOD(P-1)} (MOD P)

コード
#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