对于[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. openssl 安装配置

    Openssl是个为网络通信提供安全及数据完整性的一种安全协议,囊括了主要的密码算法.常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用.首先下载Openssl包: ...

  2. Android实现按钮点击效果(第一次点击变色,第二次恢复)

    1.首先创建一个按钮 <Button android:id="@+id/click" android:layout_width="fill_parent" ...

  3. NASM 之 helloworld1

    SECTION .data msg: db "Hello World!", 0x0a len: equ $-msg SECTION .text global _main kerne ...

  4. caffe修改需要的东西 6:40

    https://blog.csdn.net/zhaishengfu/article/details/51971768?locationNum=3&fps=1

  5. python基础面试题整理---从零开始 每天十题(01)

    最近在弄flask的东西,好久没写博客的,感觉少了点什么,感觉被别人落下好多,可能渐渐的养成了写博客的习惯吧.也是自己想学的东西太多了(说白了就是基础太差了,只是know how,不能做到konw w ...

  6. cmake 指定输出目录

    $ mkdir ~/cpp-netlib-build $ cd ~/cpp-netlib-build $ cmake -DCMAKE_BUILD_TYPE=Debug \ > -DCMAKE_C ...

  7. ios 团购信息客户端demo(一)

    团购信息客户端,主要整合了ASIHTTPREQUEST,KISSXML,AQGridView,MBProgressHUD这几个主要流行的IOS开发库,我们先来看一下效果图 首先我们新建一个IOS工程, ...

  8. ios之UISplitViewController

    iPad的屏幕比iPhone大,所以在界面上,iPad比iPhone多一个UISplitViewController,用来实现iPad在横屏时,分两栏显示所需要的界面,可以一边是目录一边是具体的内容. ...

  9. visibilitychange 标签可见性

    var pageVisibility = document.visibilityState;// 监听 visibility change 事件document.addEventListener('v ...

  10. 文件读写FILE类

    1. 新建一个文件: FILE *f = fopen("a.txt","w+"); (1)fopen()函数介绍fopen的原型是:FILE *fopen(co ...