[loj2978]杜老师
假设所有素数从小到大依次为$p_{1},p_{2},...,p_{k}$,我们将$x$转换为一个$k$位的二进制数,其中从低到高第$i$位为1当且仅当其$p_{i}$的幂次为奇数
不难发现以下两个性质:
1.假设$x$和$y$转换得到的二进制数分别为$x'$和$y'$,则$xy$转换后二进制数为$x'\oplus y'$
2.$x$为完全平方数当且仅当$x$转换得到的二进制为0
由此,实际上也就是统计$[l,r]$这些数所转换的二进制数有多少个子集结果为0
考虑线性基,当构造得到线性基后,根据线性基有以下性质:对于线性基外任取若干个数,线性基内恰存在一种取法使得最终异或结果为0
首先,由于线性基外的每一个数都能与线性基内的若干个数异或为0,将所有数异或起来也就得到了一种方案,同时若有两种方案,即线性基内存在若干个数异或为0,也矛盾
由此,我们得到了方案数就是$2^{r-l+1-线性基内数的个数}$
暴力求线性基复杂度是$o(\frac{r-l+1}{\omega}\pi(r)^{2})$(其中$\pi(r)$表示小于等于$r$的素数个数),需要优化:
由于大于$\sqrt{r}$的素因子至多只有1个,因此可以手动模拟这一次操作,具体来说遍历时在第一次出现某个大素数(大于$\sqrt{r}$的素数)时记录该数,并令之后出现含有此因子的都异或该数
这样做的复杂度降为$o(\frac{r-l+1}{\omega}\pi(\sqrt{r})^{2})$,但还是无法通过
进一步的,暴力验证可以发现在$r-l\ge 6661$时,线性基一定会满,即线性基内数的个数即$[l,r]$中所有出现的素因子个数,这个可以枚举素数来计算
最终,复杂度即$o(t(\pi(r)+\frac{6661\pi(\sqrt{r})^{2}}{\omega}))$,可以通过

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 10000005
4 #define mod 998244353
5 #define L 6661
6 #define P 446
7 bitset<P>g,bt[L],f[P];
8 int t,l,r,mi[N],vis[N],p[N],lst[N];
9 int main(){
10 mi[0]=1;
11 for(int i=1;i<N;i++)mi[i]=2*mi[i-1]%mod;
12 vis[1]=1;
13 for(int i=2;i<N;i++){
14 if (!vis[i])p[++p[0]]=i;
15 for(int j=1;(j<=p[0])&&(i*p[j]<N);j++){
16 vis[i*p[j]]=1;
17 if (i%p[j]==0)break;
18 }
19 }
20 scanf("%d",&t);
21 while (t--){
22 scanf("%d%d",&l,&r);
23 int ans=r-l+1;
24 if (r-l>=L){
25 for(int i=1;p[i]<=r;i++)
26 if (r/p[i]>(l-1)/p[i])ans--;
27 }
28 else{
29 for(int i=0;i<P;i++)f[i].reset();
30 for(int i=l;i<=r;i++){
31 int k=i;
32 for(int j=1;j<=P;j++){
33 int tot=0;
34 while (k%p[j]==0){
35 tot^=1;
36 k/=p[j];
37 }
38 bt[i-l][j-1]=tot;
39 }
40 g=bt[i-l];
41 if (k>1){
42 if ((lst[k]<l)||(lst[k]>=i))lst[k]=0;
43 if (!lst[k]){
44 lst[k]=i;
45 ans--;
46 }
47 g^=bt[lst[k]-l];
48 }
49 for(int j=0;j<P;j++){
50 if (!g.any())break;
51 if (g[j]){
52 if (!f[j].any()){
53 f[j]=g;
54 ans--;
55 }
56 g^=f[j];
57 }
58 }
59 }
60 }
61 printf("%d\n",mi[ans]);
62 }
63 return 0;
64 }
[loj2978]杜老师的更多相关文章
- 【THUSC2017】杜老师
题目描述 杜老师可是要打+∞年World Final的男人,虽然规则不允许,但是可以改啊! 但是今年WF跟THUSC的时间这么近,所以他造了一个idea就扔下不管了…… 给定L,R,求从L到R的这R− ...
- 【THUSC2017】【LOJ2978】杜老师 高斯消元
题目大意 给你 \(l,r\),求从 \(l\) 到 \(r\) 这 \(r-l+1\) 个数中能选出多少个不同的子集,满足子集中所有的数的乘积是一个完全平方数. 对 \(998244353\) 取模 ...
- LOJ #2978「THUSCH 2017」杜老师
听说LOJ传了THUSC题赶紧上去看一波 随便点了一题都不会做想了好久才会写暴力爆了一发过了... LOJ #2978 题意 $ T$次询问,每次询问$ L,R$,问有多少种选取区间中数的方案使得选出 ...
- 洛谷 P4948 拉格朗日多项式插值(杜老师板子)
https://www.luogu.org/problemnew/show/P4948 这篇博客主要目的是存一下的dls的神奇板子,本来应该是推公式或者二分做的 但是dls的插值板子直接写好了这个特殊 ...
- THUSC 2017 D1T2 杜老师
这是个非常有趣的数学题啦... 其实大概推一推式子就能得到一个信息,就是答案一定是$2$的整数次幂,并且其实答案就是$2^{R-L+1-sum}$,其中$sum$表示有多少个数不能用$L-i-1$的数 ...
- loj#2978. 「THUSCH 2017」杜老师(乱搞)
题面 传送门 题解 感谢yx巨巨 如果一个数是完全平方数,那么它的所有质因子个数都是偶数 我们把每一个数分别维护它的每一个质因子的奇偶性,那么就是要我们选出若干个数使得所有质因子的个数为偶数.如果用线 ...
- [THUSC2017]杜老师:bitset+线性基
算法一(50pts) 分析 有一个很显然的暴力做法,对于区间内的每个数开个bitset,然后暴力分解质因数.如果对于一个数,它的一个质因子的指数是奇数,那么就把bitset的对应位设成\(1\).答案 ...
- LOJ 2978 「THUSCH 2017」杜老师——bitset+线性基+结论
题目:https://loj.ac/problem/2978 题解:https://www.cnblogs.com/Paul-Guderian/p/10248782.html 第 i 个数的 bits ...
- 洛谷 P7451 - [THUSCH2017] 杜老师(线性基+根分+结论题)
题面传送门 看到乘积为平方数我们可以很自然地想到这道题,具体来说,我们对 \(1\sim 10^7\) 中所有质因子标号 \(1,2,\cdots,\pi(10^7)\),对于 \(x\in[l,r] ...
随机推荐
- 11.4.3 LVS-TUN
LVS-TUN 用IP隧道技术实现虚拟服务器。这种方式是在集群的节点不在同一个网段时可用的转发机制,是将IP包封装在其他网络流量中的方法。为了安全的考虑,应该使用隧道技术中的VPN,也可使用租用专线。 ...
- Apache ShardingSphere 在京东白条场景的落地之旅
京东白条使用 Apache ShardingSphere 解决了千亿数据存储和扩容的问题,为大促活动奠定了基础. 2014 年初,"京东白条"作为业内互联网信用支付产品,数据量爆发 ...
- 题解 Division Game
link Description 懒得写了. Solution 设 \(f(x)\) 表示对于一个位置操作了 \(x\) 次后刚好变为 \(1\) 的方案数,可以看出的是 \(f(x)\) 同样也是对 ...
- CAD/DWG图Web网页可视化技术之栅格和矢量瓦片
背景 在上一篇博文中CAD图DWG解析WebGIS可视化技术分析总结提到,实现CAD/DWG图形Web展示的思路一般为解析AutoCAD图形格式,然后转成html5所能绘制的格式如svg,geojso ...
- SpringBoot入门06-Thymeleaf显示作用域对象种的对象
作用域对象request,session, servletContext中的数据在Thymeleaf中的显示都是相同的 作用域对象中的 List和Set的集合在html中的显示是相同的 作用域对象中的 ...
- Dapr-简介及环境搭建
一.Dapr是什么? Dapr 是一个可移植的.事件驱动的运行时,它使任何开发人员能够轻松构建出弹性的.无状态和有状态的应用程序,并可运行在云平台或边缘计算中,它同时也支持多种编程语言和开发框架. 在 ...
- Java 创建PDF打印小册子
概述 PDF打印小册子是指将PDF格式文档在打印成刊物前需要提前进行的页面排版,以便在打印后装订成册.下面以Java代码展示如何来实现.这里调用Free Spire.PDF for Java中的Pdf ...
- dubbo注册中心占位符无法解析问题
dubbo注册中心占位符无法解析问题 1.背景 最近搞了2个老项目,想把他们融合到一起.这俩项目情况简介如下: 项目一:基于SpringMVC + dubbo,配置读取本地properties文件,少 ...
- 3 Implementation: The Big Picture 实现:蓝图
三.Implementation: The Big Picture 实现:蓝图 3.1 Layering of a .NET Solution .Net解决方案的分层 The picture belo ...
- 错误 Unresolved reference 'AF_INET' 解决办法
错误代码如下: import socketserer_socket = socket.socket(AF_INET, SOCK_DGAM) 错误信息: 原因分析: 1.AF_INET,SOCK_DGA ...