LSZ很皮!LSZ的皮肤衣更皮!c++
LSZ有不少件神奇的皮肤衣,并且LSZ老是喜欢一次穿上多件皮肤衣(一件套一件,并且一直穿好多天),这些皮肤衣有透明或不透明两种状态,当不透明的皮肤衣吸取了一天的阳光直射后,就会变成透明的皮肤衣,透明的皮肤衣能使阳光照射到里层皮肤衣,而透明的皮肤衣再吸取阳光,会在次日会变成不透明的皮肤衣,不透明的皮肤衣会阻止阳光照射到里层皮肤衣。算法
LSZ从某天起(该天算做第1天)穿上N(N <= \(4*10^{9}\))件皮肤衣(刚开始全部皮肤衣都是不透明的),问你最少要通过多少天,LSZ身上的皮肤衣都经历过透明变化?数组
例现在天(公元2018年6月17日)LSZ穿了3件皮肤衣服,会在公元2018年6月21日3件皮肤衣都会经历过透明变化。spa
一行,只有一个整数N。code
最少的天数(对N取余数)blog
3
2
5对3取余数为2。数学
这个题算是一个比较裸的数论的题了吧,很显然的式子,先来定义一个数组f[i]表示有i个衣服要变透明所须要的天数it
#include<bits/stdc++.h> using namespace std; typedef long long ll; ll power(ll a,ll b,ll p){ ll ans = 1%p; for(;b;b>>=1){ if(b&1)ans = ans*a%p; a = a * a % p; } return ans; } int main(){ ll n;scanf("%lld",&n); ll ans = power(2,n-1,n); ans = (ans + 1)%n; printf("%lld",ans); return 0; }
谢谢观看
点个关注class
_<方法