2015 HDU 多校联赛 5363 Key Set
题目: http://acm.hdu.edu.cn/showproblem.php?pid=5363
根据前面给出的例子,得出求解公式 fn = 2^(n-1) - 1, 数据量大,实际就是求幂次方。
可用分治法求解,复杂度O(nlogn)
// 分治法求快速幂 #include <bits/stdc++.h> using namespace std; typedef unsigned long long ull; const int MOD = 1000000007; ull getAns(ull a, int n) { if (n==0) return 1; if (n==1) return a; else { a %= MOD; ull res = a*a; res %= MOD; if (n%2 == 0) { return getAns(res, n/2)%MOD; } else { return (getAns(res, n/2)*a)%MOD; } } } int main(void) { //freopen("in.txt", "r", stdin); int t = 0; scanf("%d", &t); ull a = 2; while(t--) { int n = 0; scanf("%d", &n); printf("%lld\n", getAns(a, n-1)-1); // 2^(n-1) - 1 } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。 http://blog.csdn.net/core__code
时间: 2024-10-13 22:28:14