HDU6069 2017 Multi-University Training Contest - Team 4 1003 Counting Divisors(唯一分解定理+思维优化)
2017-08-03 18:35
645 查看
题目大意:
求L到R范围内,每个数K次方的因数个数之和。
思路:
唯一分解定理不要对L-R之间内的数一次次地进行分解质因数,要把质因数的循环放外面,去试除L-R的每个数,这样才能做到一大波常数优化。
#include<bits/stdc++.h> using namespace std; #define pii pair<int, int> typedef long long ll; typedef unsigned long long ull; const int maxn = 1000105; const ll mod = 998244353; int prim[maxn], p[maxn], cnt = 0; void init() { for(ll i = 2; i <= 1000000; i++) if(prim[i] == 0) { p[++cnt] = i; for(ll j = i*i; j <= 1000000; j += i) prim[j] = 1; } } ll number[maxn], val[maxn], tol[maxn]; int main() { init(); int t; ll l, r, k; scanf("%d", &t); while(t--) { cin >> l >> r >> k; for(ll i = l; i <= r; i++) number[i-l+1] = i, val[i-l+1] = 1; for(ll i = 1; i <= cnt; i++) { if(r < p[i]) break; ll t1 = (l / p[i]) * p[i]; for(; t1 <= r; t1 += p[i]) if(t1 >= l) { ll cou = 0; while(number[t1-l+1] % p[i] == 0) { cou++; number[t1-l+1] /= p[i]; } val[t1-l+1] = val[t1-l+1] * (cou * k + 1) % mod; } } for(ll i = l; i <= r; i++) if(number[i-l+1] != 1) val[i-l+1] = val[i-l+1] * (k + 1) % mod; ll ans = 0; for(ll i = l; i <= r; i++) ans = (ans + val[i-l+1]) % mod; cout << ans << endl; } return 0; }
相关文章推荐
- 2017 Multi-University Training Contest - Team 4 :1003&hdu6069、Counting Divisors
- 2017 Multi-University Training Contest - Team 1 1003 Colorful Tree
- 2017 Multi-University Training Contest - Team 5 1008 【思维 + 01背包思想】
- 2017 Multi-University Training Contest - Team 1 1006 【思维+强联通找环】
- hdu 6045 简单的思维题 2017 Multi-University Training Contest - Team 2
- 2017 Multi-University Training Contest - Team 2,HDU 6045 Is Derek lying?(思维水题)
- 2017 Multi-University Training Contest - Team 4-hdu6069 Counting Divisors
- 2017 Multi-University Training Contest - Team 2 1003 Maximum Sequence
- 2017 Multi-University Training Contest - Team 2:1003 Maximum Sequence(贪心+线段树)
- 2017 Multi-University Training Contest - Team 3 1003 Kanade's sum
- 2017 Multi-University Training Contest - Team 2 1003 【贪心 + 优先队列】
- HDU 6058 2017 Multi-University Training Contest - Team 3 1003 :Kanade's sum:简单计数问题
- 2017 Multi-University Training Contest - Team 3 1003 Kanade's sum
- 2017 Multi-University Training Contest 4 1003 || HDU6069
- 2017 Multi-University Training Contest - Team 9 1003&&HDU 6163 CSGO【计算几何】
- HDU-6105 Gameia - 2017 Multi-University Training Contest - Team 6(思维之找规律或二分图最大匹配)
- 2017 Multi-University Training Contest - Team 2 1003 Maximum Sequence
- 2017 Multi-University Training Contest - Team 3 1003(hdu 6058) Kanade's sum(链表)(set)
- 2017 Multi-University Training Contest - Team 1 1009 I Curse Myself 【思维 + 仙人掌图】
- 2017 Multi-University Training Contest - Team 7:1003. Color the chessboard(...)