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
_<方法