题目链接


设 x = p 1 a 1 p 2 a 2 . . . . p n a n x = p_1^{a_1}p_2^{a_2}....p_n^{a_n} x=p1a1​​p2a2​​....pnan​​
则 d ( x ) = ( 1 + a 1 ) ( 1 + a 2 ) . . . ( 1 + a n ) d(x) = (1+a_1)(1+a_2)...(1+a_n) d(x)=(1+a1​)(1+a2​)...(1+an​)
d ( x k ) = ( 1 + k a 1 ) ( 1 + k a 2 ) ( 1 + k a 3 ) . . . ( 1 + k a n ) d(x^k) = (1+ka_1)(1+ka_2)(1+ka_3)...(1+ka_n) d(xk)=(1+ka1​)(1+ka2​)(1+ka3​)...(1+kan​)

因 k k k已知,所以我们只需要知道 L &lt; = x &lt; = R L&lt;=x&lt;=R L<=x<=R的每一个x质因数分解后的 a 1 , a 2 . . . a n a_1,a_2...a_n a1​,a2​...an​便可以求解出答案。

因 x &lt; = 1 e 12 x&lt;=1e12 x<=1e12,故可以考虑枚举出 1 e 6 1e6 1e6以内的素数,采用区间素数筛求出每一个数的质因数指数。(可参考白书(《挑战程序设计竞赛》)素数一章的例题)

设区间长度为 n n n
总复杂度 O ( R + n l o g l o g n ) O(\sqrt R+nloglog n) O(R ​+nloglogn)


代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;typedef long long ll;
const int P = 998244353;
const int G = 3;
const int A = 1e6 + 10;
const int N =  70;
bool vis[A];
int pri[A],tot;void init(){tot = 0;for(ll i=2 ;i<A ;i++){if(!vis[i]){pri[++tot] = i;}for(ll j=1 ;j<=tot && i*pri[j]<A ;j++){vis[i*pri[j]] = 1;if(i%pri[j] == 0) break;}}
}ll ans[A],val[A];
void solve(ll L,ll R,ll t){for(ll i=L ;i<=R ;i++){ans[i-L] = 1;val[i-L] = i;}for(ll i=1 ;i<=tot ;i++){ll now = pri[i];for(ll j=max(2LL,(L+now-1)/now)*now ;j<=R ;j+=now){if(val[j-L] % now) continue;ll cnt = 0;while(val[j-L] % now == 0){val[j-L]/=now;cnt++;}ans[j-L] = (1+t*cnt)%P*ans[j-L]%P;}}for(ll i=L ;i<=R ;i++){if(val[i-L] > 1){ans[i-L] = (1+t)%P*ans[i-L]%P;}}ll sum = 0;for(ll i=L ;i<=R ;i++){sum = (sum + ans[i-L]) % P;}printf("%I64d\n",sum);
}int main(){init();int T;scanf("%d",&T);while(T--){ll l,r,k;scanf("%I64d%I64d%I64d",&l,&r,&k);solve(l,r,k);}return 0;
}

反思:非常简单的一题。本来我队开场三十分钟就推出了该公式并在白书上找到了区间筛的原题和代码。按正常剧情本应该是最多一小时内就能正确AC此题,但作为队内此题的负责人,却终场也没有搞出来qwq

问题主要出在两个方面。
一是对自己的第一直觉太自信,赛前两天才开始学FFT和NTT,一看到取模的质数是一个费马质数,存在原根,虽然NTT学得并不好,但仍然固执地认定此题一定需要用到NTT进行优化,并带偏了队友的思路,在没有跟队友讨论确定思路(因对需要使用NTT太自信,而两位队友都没学过该算法,故错误地认为没有讨论的必要)的情况下直接开写,用NTT将 d ( i k ) = ( 1 + k a 1 ) ( 1 + k a 2 ) ( 1 + k a 3 ) . . . ( 1 + k a n ) d(i^k) = (1+ka_1)(1+ka_2)(1+ka_3)...(1+ka_n) d(ik)=(1+ka1​)(1+ka2​)(1+ka3​)...(1+kan​)

关于k的多项式进行展开运算,从而引起时间复杂度爆炸,提交的代码T了很多次,浪费了大量时间。

另外一方面便在于对算法时间复杂度的估算不够重视。本来半小时想出的思路是可以正确AC的,却凭自我感觉认为其复杂度太高(因结果表达式太直接地就推了出来),跳过了复杂度估算的步骤,一直错误地思考着优化式子的办法,并强行用上了NTT(果然还是太弱了qwq

HDU 6069 数论 区间素数筛 + 赛后反思相关推荐

  1. M - Help Hanzo (大数区间素数筛)

    题目 思路:先对1e5之内的素数筛好,用这些素数筛去大区间内的合数. #include<cstdio> #include<cstring> #include<iostre ...

  2. Help Hanzo(区间素数筛)

    题目: Amakusa, the evil spiritual leader has captured the beautiful princess Nakururu. The reason behi ...

  3. Goldbach`s Conjecture(数论)素数筛

    题目:https://vjudge.net/contest/242286#problem/A Goldbach's conjecture is one of the oldest unsolved p ...

  4. HDOJ 6069 素数筛

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=6069 题意: 就是题目中的公式 题解: 这个题公式很好推 d(nk) = (kc1 + 1)(kc2 + ...

  5. 筛表合集(素数筛 欧拉函数筛 莫比乌斯函数筛)

    [目录] 一.素数筛 1.素数判断 2.素数普通筛 3.素数线性筛 4.素数区间筛 二.欧拉函数筛 三.莫比乌斯函数筛 [素数筛] 1.直接判定质数 bool judgePrime( int num ...

  6. 面试官本拿求素数搞我,但被我优雅的“回击“了(素数筛)

    原创公众号(希望能支持一下):bigsai 转载请联系bigsai 文章收录在github 求star 前言 现在的面试官,是无数开发者的梦魇,能够吊打面试官的属实不多,因为大部分面试官真的有那么那几 ...

  7. 等差素数列(素数筛暴力)

    标题:等差素数列 2,3,5,7,11,13,-是素数序列. 类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列. 上边的数列公差为30,长度为6. 2004年, ...

  8. nssl1210-质数【素数筛】

    正题 题目大意 求l∼rl\sim rl∼r这个区间素数或两个素数的乘积的数个数 解题思路 在欧式筛的时候判断j是不是素数,是就标记就行了. code #pragma GCC optimize(2) ...

  9. 算法笔记--素数筛(朴素筛,埃式筛,欧拉筛)

    素数 素数也叫质数,是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数.如2 , 3 , 5 , 7 , 11等. 素数筛 素数筛即筛选出1~n内的素数的方法,这里介绍三种 常见的求素数 ...

最新文章

  1. Java数据结构 利用双栈实现链表操作
  2. h2 mysql 差别_h2内存数据库和mysql数据库的区别
  3. vue前端服务器端口_解密智联招聘的大前端架构 Ada
  4. OGRE分析之设计模式
  5. 若依前后端部署之后验证码不显示
  6. windows7下安装php的imagick和imagemagick扩展教程
  7. java教程-scala教程-带你从菜鸟入门
  8. uva 714 Copying Books
  9. 有的朋友问我创业没有资金怎么办?
  10. eclipse-阶段四-Server Tomcat v8.5 Server at localhost failed to start.
  11. MVC去掉传参时的验证:从客户端中检测到有潜在危险的Request.QueryString值
  12. 第k小元素——分治法
  13. 小程序毕设作品之微信小程序点餐系统毕业设计(1)开发概要
  14. 用python画蜡笔小新_用python画的蜡笔小新
  15. 2022-04- 聂卫平围棋道场-小汪小喵学围棋
  16. 【转租】【房东直租】【次渠东里一区、高层正规两居室、次卧】
  17. 如何将程序打包成exe
  18. 【 长尾理论在现实中的巨大威力】
  19. [JS] js-xlsx生成Excel(模拟下载)
  20. Saiku-ui代码结构分析

热门文章

  1. Jmeter压测输出可观报告--用表格察看结果(view results in table)输出excel格式
  2. 原理+代码|深入浅出Python随机森林预测实战
  3. ARM-GCC环境搭建:适用STM32/GD32的编译调试总结
  4. 项目启动会发言稿(范文五)
  5. 四省通衢之“衢”——衢州(美食篇)
  6. Kettle 使用资源库功能把ktr元数据统一存储到数据库中
  7. 执行wsdl2java 中文乱码的解决
  8. PyCharm 汉化插件
  9. 阿里云服务器(ECS)优惠券领取
  10. 《现代操作系统(中文第四版)》笔记 第三章 内存管理