POJ1845 Sumdiv【快速模幂+素因子分解+等比数列+二分法】
2017-06-01 18:20
381 查看
问题链接:POJ1845 Sumdiv。
问题简述:参见上述链接。
问题分析:计算a^b的因子数,首先要对a进行因子分解,然后再进行计算。
程序说明:计算过程中用到了快速模幂函数。
题记:(略)
AC的C++语言程序如下:
问题简述:参见上述链接。
问题分析:计算a^b的因子数,首先要对a进行因子分解,然后再进行计算。
程序说明:计算过程中用到了快速模幂函数。
题记:(略)
AC的C++语言程序如下:
/* POJ1845 Sumdiv */ #include <iostream> using namespace std; const int MOD = 9901; const int N = 1000; int fact[N+1], e[N+1], fcount; void setfact(int n) { fcount = 0; if(n && n % 2 == 0) { fact[fcount] = 2; e[fcount] = 0; while(n && n % 2 == 0) { e[fcount]++; n /= 2; } fcount++; } for(int i=3; i*i <=n; i+=2) { if(n % i == 0) { fact[fcount] = i; e[fcount] = 0; while(n && n % i == 0) { e[fcount]++; n /= i; } fcount++; } } if(n != 1) { fact[fcount] = n; e[fcount] = 1; fcount++; } } // 快速模幂计算函数 long long powermod(long long a, long long n, int m) { long long res = 1; while(n) { if(n & 1) { // n % 2 == 1 res *= a; res %= m; } a *= a; a %= m; n >>= 1; } return res; } //递归二分求 (1 + p + p^2 + p^3 +...+ p^n)%mod long long sum(long long p, long long n) { if(n==0) return 1; else if(n % 2) // 奇数:(1 + p + p^2 +...+ p^(n/2)) * (1 + p^(n/2+1)) return (sum(p, n / 2) * (1 + powermod(p, n/2+1, MOD))) % MOD; else // 偶数:(1 + p + p^2 +...+ p^(n/2-1)) * (1+p^(n/2+1)) + p^(n/2) return (sum(p, n / 2 - 1) * (1 + powermod(p, n / 2 + 1, MOD)) + powermod(p, n / 2, MOD)) % MOD; } int main() { int a, b, ans; while(cin >> a >> b) { setfact(a); ans = 1; for(int i=0; i<fcount; i++) ans = (ans * (sum(fact[i], e[i] * b ) % MOD)) % MOD; cout << ans << endl; } return 0; }
相关文章推荐
- poj_1845 Sumdiv(素因子分解+快速幂+约数和+二分求等比数列和)
- POJ1845 Sumdiv 费马小定理+欧拉函数+素因子分解
- POJ 1845 Sumdiv(质因数分解+快速幂+二分法求等比数列的和)
- POJ 1845 Sumdiv (唯一分解定理+求等比数列前n项和)
- poj 1845Sumdiv(唯一分解定理&&约数和公式&&二分求等比数列和&&反复平方法计算p^n幂~~~好多定理啊)
- POJ 1845 Sumdiv(因子分解+快速幂+二分求和)
- POJ 1845 Sumdiv【同余模运算+递归求等比数列和+快速幂运算】
- POJ 1845 Sumdiv (逆元 等比数列求和)
- POJ 1845-Sumdiv(快速幂取模+整数唯一分解定理+约数和公式+同余模公式)
- POJ 1845 Sumdiv (因子和)
- poj 1845 Sumdiv (算术基本定理求一个数因子和)
- POJ 1845-Sumdiv【经典数学题目---求因子和】
- POJ 1845 Sumdiv 求幂级数的因子和+二分
- POJ 1845 Sumdiv(求阶乘的因子和)
- poj 1845 Sumdiv(数论:欧拉函数+二分求等比数列前n项和+快速幂取模)
- 【POJ 1845】 Sumdiv (整数唯分+约数和公式+二分等比数列前n项和+同余)
- POJ 1845 Sumdiv(求阶乘的因子和)
- POJ 1845-Sumdiv【经典数学题目---求因子和】
- poj 1845 Sumdiv(二分递归求等比数列+素因子分解)
- POJ 1845 Sumdiv(约数和公式+等比数列求和)