[2017 Multi-University Training Contest
来源:互联网 发布:英语发音规则 知乎 编辑:程序博客网 时间:2024/06/05 15:10
[2017 Multi-University Training Contest - Team 4] HDU 6069 Counting Divisors
题目链接:
HDU 6069
题目大意:
给定
数据范围:
解题思路:
我们将
那么
因此, 我们可以先线性筛出
代码:
//2017-08-04 13:37//2017-08-04 14:00#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<cstdlib>using namespace std;typedef long long LL;const int MaxN = 1e6;const int pt = 998244353;int T;LL l, r, k;int prime[MaxN + 5];LL num[MaxN + 5], sum[MaxN + 5];int pcnt;bool vis[MaxN + 5];void getprime(){ for(int i = 2; i <= MaxN; i++){ if(!vis[i]) prime[++pcnt] = i; for(LL j = 1; j <= pcnt && i * prime[j] <= MaxN; j++){ vis[i * prime[j]] = true; if(i % prime[j] == 0) break; } }}int main(){ scanf("%d", &T); getprime(); while(T--){ scanf("%lld %lld %lld", &l, &r, &k); for(int i = 1; i <= r - l + 1; i++) num[i] = l + i - 1, sum[i] = 1; LL tmp = sqrt(r); for(int i = 1; i <= pcnt; i++){ LL x = l, p = prime[i]; if(p > tmp) break; if(x % p != 0) x = x + p - x % p; while(x <= r){ int pos = x - l + 1; LL cnt = 0; while(num[pos] % p == 0) cnt++, num[pos] /= p; sum[pos] = sum[pos] * (cnt * k % pt + 1) % pt; x += p; } } LL ans = 0; for(int i = 1; i <= r - l + 1; i++) if(num[i] > 1) sum[i] = sum[i] * (k + 1) % pt; for(int i = 1; i <= r - l + 1; i++) ans = (ans + sum[i]) % pt; printf("%lld\n", ans); } return 0;}
标签: HDU 分解质因数 多校
阅读全文
0 0
- 2017 Multi-University Training Contest
- 2017 Multi-University Training Contest
- 2017 Multi-University Training Contest
- 2017 Multi-University Training Contest
- 2017 Multi-University Training Contest
- 2017 Multi-University Training Contest
- 2017 Multi-University Training Contest
- 2017 Multi-University Training Contest
- 2017 Multi-University Training Contest
- 2017 Multi-University Training Contest
- 2017 Multi-University Training Contest
- 2017 Multi-University Training Contest
- #2017 Multi-University Training Contest
- 2017 Multi-University Training Contest
- #2017 Multi-University Training Contest
- 2017 Multi-University Training Contest
- 2017 Multi-University Training Contest
- 2017 Multi-University Training Contest
- Ants
- VB机房收费系统选项卡控件(SSTab)介绍
- Java的23种设计模式
- 拷贝函数
- LeetCode--Combination Sum II
- [2017 Multi-University Training Contest
- Linux下安装python3
- c++%(取余运算)转换为取模运算
- Docker持续部署
- EasyDemo*Java面试常见题
- 虚幻4RenderTarget制作多pass效果
- Android NDK开发:JNI基础篇
- 邻接矩阵 有向图 判断是否有环 是否连通 DFS C实现~
- 51nod 1859 Clarke and number ACM