題意:輸 入兩個非負整數a、b和正整數n(0<=a,b<=2^64,1<=n<=1000),讓你計算f(a^b)對n取模的值,其中f(0) = 0,f(1) = 1;且對任意非負整數i,f(i+2)= f(i+1)+f(i)。
思路:因為斐波那契序列要對n取模,余數只有n種,所以最多n^2項序列就開始重復,所以問題轉化成了求周期然後大整數取模。
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define eps 1e-6 #define LL long long #define ULL unsigned long long #define pii (pair) //#pragma comment(linker, /STACK:1024000000,1024000000) using namespace std; const int maxn = 1000 + 100; //const int INF = 0x3f3f3f3f; ULL a, b; int n; int f[maxn*maxn]; ULL pow_mod(ULL a, ULL p, ULL n) { if(p == 0) return 1; ULL ans = pow_mod(a, p/2, n); ans = ans * ans % n; if(p%2 == 1) ans = ans * a % n; return ans; } int main() { //freopen(input.txt, r, stdin); int T; cin >> T; while(T--) { cin >> a >> b >> n; f[0] = 0, f[1] = 1%n; int loop = 1; for(int i = 2; i <= n*n+100; i++) { f[i] = (f[i-1]+f[i-2]) % n; if(f[i]==f[1] && f[i-1]==f[0]) { loop = i - 1; break; } } ULL ans = pow_mod(a%loop, b, (ULL)loop); cout << f[ans] << endl; } return 0; }
顧名思義,絕對定位就是使用最原始的定位方法,給
A standard SAP ALV list report
在C++編程中,我們進程會用到數組,這看起來很
Battle City
我們回顧一下,第一章實現的Web服務器類圖大致如下:其中Ht
E. Infinite Inversions t