HDU 6069 数论 区间素数筛(+赛后反思
来源:互联网 发布:mt7620数据手册 编辑:程序博客网 时间:2024/06/06 12:11
题目链接
设
则
因
因
设区间长度为
总复杂度
代码:
#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将
另外一方面便在于对算法时间复杂度的估算不够重视。本来半小时想出的思路是可以正确AC的,却凭自我感觉认为其复杂度太高(因结果表达式太直接地就推了出来),跳过了复杂度估算的步骤,一直错误地思考着优化式子的办法,并强行用上了NTT(果然还是太弱了qwq
认真反思一下,希望接下来的几场能有更好的发挥吧qwq
阅读全文
1 0
- HDU 6069 数论 区间素数筛(+赛后反思
- HDU 6069 数学题,区间素数筛
- [数论] HDU 1431 素数回文 筛素数
- 赛后反思
- [数论]HDU 1215 七夕节 筛素数
- HDU 5317(数论,素数筛法)
- HDU 6069 Counting Divisors(枚举区间)(素数筛模版)
- 大区间内素数(数论)
- hdu 2521 反素数(数论)
- HDU 1262 寻找素数对 数论-素数
- 【数论】筛素数
- (Relax 数论1.14)POJ 26889 Prime Distance(区间筛素数:求一个区间L\U中距离最近的两个素数和距离最远的两个素数)
- SCOI2017 赛后总结及反思
- 素数表,区间素数筛
- Hdu 6069 Counting Divisors【素数区间筛+预处理素因子分解】
- hdu 6069 区间筛
- hdu 6069 区间筛
- HDU 2136 Largest prime factor 数论-素数
- hdu--1014 Uniform Generator
- deepin安装jdk8
- D
- 使用存储过程查询数据库(sql有动态拼接)
- 温故知新.Handler消息传递机制.
- HDU 6069 数论 区间素数筛(+赛后反思
- Linux系统磁盘管理
- 探讨PHP页面跳转几种实现技巧
- Linux学习(六):命令与文件的查阅,Root用户和个人用户使用which命令的差别
- DOM包裹wrapAll()方法
- Tomcat启动异常—Error configuring application listener of class:***.class
- 《零基础入门学习Python》学习过程笔记【35图形用户界面入门】(没看)
- 数据结构之桶排序与基数排序
- 嵌入式每日学习心得2017.08.03