Codeforces 542 D. Superhero's Job
2015-08-02 12:32
253 查看
http://codeforces.com/problemset/problem/542/D
x = p1^k1 * p2^k2 * p3^k3 * ..... (p1,p2,p3...是素因子)
那么 k 一定是某几个素因子的乘积,且每个素因子的个数都与x相等。
J(x) = 1 + p1^k1 + p2^k2 +...+ p1^k1 * p2^k2 + .... (共 2 ^ q 项)
= (p1^k1 + 1) * (p2^k2 + 1)*...
由于A的约数个数不多,而一个约数只对应一个素因子,所以有效的素因子也不多,先处理出来。
然后 dp[i][j] 表示前i个素因子能组成A的第j个因子的方案数。
x = p1^k1 * p2^k2 * p3^k3 * ..... (p1,p2,p3...是素因子)
那么 k 一定是某几个素因子的乘积,且每个素因子的个数都与x相等。
J(x) = 1 + p1^k1 + p2^k2 +...+ p1^k1 * p2^k2 + .... (共 2 ^ q 项)
= (p1^k1 + 1) * (p2^k2 + 1)*...
由于A的约数个数不多,而一个约数只对应一个素因子,所以有效的素因子也不多,先处理出来。
然后 dp[i][j] 表示前i个素因子能组成A的第j个因子的方案数。
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define rep(i,n) for(int i=0; i= N) break; use[i * pri[j]] = 1; if(i % pri[j] == 0) break; } } } int _fac; ll fac ; map mp; void get_fac(ll n) // 因子 { _fac = 0; for(ll i=1; i*i<=n; i++) if(n % i == 0) { fac[_fac++] = i; if(n / i != i) fac[_fac++] = n / i; } } ll usf_pri ; int _usf_pri; void get_usf_pri() // 有效的素因子 { _usf_pri = 0; for(int i=0; i<_fac; i++) { ll tmp = fac[i] - 1; for(int j=0; j<_pri && pri[j] * 1LL * pri[j] <= tmp; j++) { if(tmp % pri[j] != 0) continue; while(tmp % pri[j] == 0) tmp /= pri[j]; if(tmp == 1) usf_pri[_usf_pri++] = pri[j]; break; } if(tmp + 1 == fac[i] && tmp > 1) usf_pri[_usf_pri++] = tmp; } sort(usf_pri,usf_pri+_usf_pri); _usf_pri = unique(usf_pri,usf_pri+_usf_pri) - usf_pri; } ll dp ; int get_ans() { mst(dp,0); dp[0] = 1; rep(i,_usf_pri) { for(int j=_fac-1; j>=0; j--) { for(ll a=usf_pri[i]; ; a*=usf_pri[i]) { if(a > fac[j]) break; if(fac[j] % (a + 1) != 0) continue; dp[j] += dp[mp[fac[j] / (a + 1)]]; } } } return (int)dp[_fac-1]; } int main() { get_pri(); ll A; scanf("%I64d",&A); get_fac(A); sort(fac,fac+_fac); for(int i=0; i<_fac; i++) { mp[fac[i]] = i; } get_usf_pri(); printf("%d\n",get_ans()); return 0; }
相关文章推荐
- Codeforces Round #197 (Div. 2)
- Codeforces Round #198 (Div. 1)
- Codeforces 405E Codeforces Round #238 (Div. 2)E
- Codeforces 407C Codeforces Round #239 (Div. 1)C
- CodeForces 449A - Jzzhu and Chocolate
- CodeForces 449 B. Jzzhu and Cities
- Codeforces Round #265 (Div. 2)
- Codeforces #310 div2 C. Case of Matryoshkas
- 状态压缩DP codeforces 244 Problem C. The Brand New Function 和 codeforces 165 E. Compatible Numbers
- codeforces 16 Problem E fish
- Codeforces round #247 for Div. 2
- Codeforces Round #246 (Div. 2)
- Codeforces #264(div 2)D.Gargari and Permutations
- Codeforces Round #236 (Div. 2)------A,B
- codeforces 257 div2 B
- Codeforces Gym100571A Cursed Query
- Codeforces Div2 244AB
- Coder-Strike 2014 - Finals (online edition, Div. 2)AB
- Codeforces Div2 243AB
- Codeforces Div2 242AB