对于[l , r]内的每个数,根据唯一分解定理有  

所以有 

因为    

//可根据唯一分解定理推导

所以     

题目要求

就可以运用它到上述公式

(注意不能暴力对l,r内的数一个个分解算贡献,而应该枚举l,r区间内质数的倍数):

/*hdu6069[素数筛法] 2017多校3*/
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
LL l, r, k;
const LL MOD = 998244353LL;
int T, n, prime[], primesize;
bool isprime[];
void getlist(int listsize)
{
memset(isprime, , sizeof(isprime));
isprime[] = false;
for (int i = ; i <= listsize; i++)
{
if (isprime[i])prime[++primesize] = i;
for (int j = ; j <= primesize && i * prime[j] <= listsize; j++)
{
isprime[i * prime[j]] = false;
if (i % prime[j] == )break;
}
}
}
LL num[], ans[];
void solve() {
LL n = r - l + ;
for (int i = ; i < n; i++) {
num[i] = i + l;
ans[i] = ; //预处理l到r之间所有的数 和 其对答案的的贡献;
}
//不能枚举l到r之间的元素进行暴力质因数分解, 会超时; 所以我们可以通过枚举质数的倍数来优化。
for (int i = ; (LL)prime[i]*prime[i] <= r; i++) {
for (LL j = prime[i] * (l / prime[i]); j <= r; j += prime[i]) {
if (j < l) continue;
LL cnt = ; //对l到r之间素数prime[i]的倍数进行质因数分解, 计算出其对答案的贡献;
while (num[j - l] % prime[i] == ) {
cnt++;
num[j - l] /= prime[i];
}
ans[j - l] = (ans[j - l] * (1LL + cnt * k)) % MOD;
}
}
LL res = ;
for (int i = ; i < n; i++) {
if (num[i] > ) {
ans[i] = (ans[i] * (1LL + k)) % MOD;
}
res = (res + ans[i]) % MOD;
}
printf("%lld\n", res);
}
int main() {
getlist();
scanf("%d", &T);
while (T--) {
scanf("%lld%lld%lld", &l, &r, &k);
solve();
}
return ;
}

hdu6069[素数筛法] 2017多校4的更多相关文章

  1. hdu6098[RMQ+筛法] 2017多校6

    /*hdu6098[RMQ+筛法] 2017多校6*/ #include <bits/stdc++.h> using namespace std; ][], len[], a[]; voi ...

  2. hdu6069(简单数学+区间素数筛法)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6069 题意: 给出 l, r, k.求:(lambda d(i^k))mod998244353,其中 ...

  3. 2017 多校2 hdu 6053 TrickGCD

    2017 多校2 hdu 6053 TrickGCD 题目: You are given an array \(A\) , and Zhu wants to know there are how ma ...

  4. HDOJ 6069 素数筛法(数学)

    Counting Divisors Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Oth ...

  5. 2017 多校3 hdu 6061 RXD and functions

    2017 多校3 hdu 6061 RXD and functions(FFT) 题意: 给一个函数\(f(x)=\sum_{i=0}^{n}c_i \cdot x^{i}\) 求\(g(x) = f ...

  6. NowCoder猜想(素数筛法+位压缩)

    在期末被各科的大作业碾压快要窒息之际,百忙之中抽空上牛客网逛了逛,无意中发现一道好题,NowCoder猜想,题意很明显,就是个简单的素数筛法,但竟然超内存了,我晕(+﹏+)~  明明有 3 万多 k ...

  7. [原]素数筛法【Sieve Of Eratosthenes + Sieve Of Euler】

    拖了有段时间,今天来总结下两个常用的素数筛法: 1.sieve of Eratosthenes[埃氏筛法] 这是最简单朴素的素数筛法了,根据wikipedia,时间复杂度为 ,空间复杂度为O(n). ...

  8. 数学#素数筛法 HDU 4548&POJ 2689

    找素数本来是很简单的问题,但当数据变大时,用朴素思想来找素数想必是会超时的,所以用素数筛法. 素数筛法 打表伪代码(用prime数组保存区间内的所有素数): void isPrime() vis[]数 ...

  9. POJ 3292 Semi-prime H-numbers (素数筛法变形)

    题意:题目比较容易混淆,要搞清楚一点,这里面所有的定义都是在4×k+1(k>=0)这个封闭的集合而言的,不要跟我们常用的自然数集混淆. 题目要求我们计算 H-semi-primes, H-sem ...

随机推荐

  1. android 常用第三方github工程

    这里有个汇总的网址:http://androidxy.com/zh/page/latest/-1/0 数据库:greenDao 参考:GreenDao3.2的使用 控件注解:Butterknife 图 ...

  2. Apache Kafka框架学习

    背景介绍 消息队列的比较 kafka框架介绍 术语解释 文件存储 可靠性保证 高吞吐量实现 负载均衡 应用场景 背景介绍: kafka是由Apache软件基金会维护的一个开源流处理平台,由scala和 ...

  3. NBUT 1115 Cirno's Trick (水)

    题意: 给出多个double数,去掉其最小的和最大的,再对余下的求均值. 思路: 再输入时将最大和最小去掉,顺便统计非最值的和,输出时除一下个数即可. #include <bits/stdc++ ...

  4. 洛谷 P1996 约瑟夫问题

    题目背景 约瑟夫是一个无聊的人!!! 题目描述 n个人(n<=100)围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再出圈,……依次类推,直到所有的人都出 ...

  5. [Batch檔案筆記] 在UNC路徑中執行Batch檔

    為了讓其他人可以免安裝又可以執行python程式所以我把python portable版本 winpython 放在samba的空間共享但是使用者如果要開 winpython cammand prom ...

  6. solr scheme配置简介

    solr 字段配置,和数据库数据索引配置 配置solr字段. schema.xml 文件里配置 先讲解一下,里面的一些字段 1. <types> ... </types> 表示 ...

  7. Web中打印的各种方案参考

    http://blog.csdn.net/chinahuyong/article/details/42527491

  8. Open Scene Graph:让VS支持不含后缀的头文件

    让VS支持不含后缀的头文件 看OSG源码时,会遇到不含后缀的头文件无定位信息的尴尬,很让人苦恼. 就是单击VS中“工具菜单栏”——>”选项(O)….”如下图所示: 菜单项,弹出选项对话框,单击“ ...

  9. [BZOJ4899]:记忆的轮廓(概率DP)

    题目传送门 题目描述: 通往贤者之塔的路上,有许多的危机. 我们可以把这个地形看做是一颗树,根节点编号为1,目标节点编号为n,其中1-n的简单路径上,编号依次递增, 在[1,n]中,一共有n个节点.我 ...

  10. lucene4.7实例详解

    java.lang.UnsupportedClassVersionError: org/apache/lucene/index/IndexableField : Unsupported major.m ...