[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] ...
随机推荐
- 梦幻西游H5游戏超详细图文架设教程
前言 想体验经典Q版西游霸服快乐吗?想体验满级VIP的尊贵吗?想体验一招秒杀的爽快吗?各种极品装备.翅膀.宠物通通给你,就在梦幻西游! 本文讲解梦幻西游H5游戏的架设教程,想研究H5游戏如何实现,体验 ...
- 使用CEF(二)— 基于VS2019编写一个简单CEF样例
使用CEF(二)- 基于VS2019编写一个简单CEF样例 在这一节中,本人将会在Windows下使用VS2019创建一个空白的C++Windows Desktop Application项目,逐步进 ...
- 记录一次基于VuePress + Github 搭建个人博客
最终效果图 网站:https://chandler712.github.io/ 一.前言 VuePress 是尤雨溪推出的支持 Vue 及其子项目的文档需求而写的一个项目,UI简洁大方,官方文档详细容 ...
- InstallSheild相关
一.关于使用InstallSheild制作安装包的总结. 1.定制化制作需要了解InstallScript语法,相关资料可以去网上查找,后续提供比较好的资料. 2.有些软件运行是需要一些环境的,譬如使 ...
- Spring框架访问数据库的两种方式的小案例
1.1 以Xml的方式访问数据库的案例 要以xml的方式访问数据库需要用到JdbcTemplate ,因为 JdbcTemplate(jdbc的模板对象)在Spring 中提供了一个可以操作数据库的对 ...
- 吴恩达深度学习课后习题第5课第1周第3小节: Jazz Improvisation with LSTM
目录 Improvise a Jazz Solo with an LSTM Network Packages 1 - Problem Statement 1.1 - Dataset What are ...
- JuiceFS 如何帮助趣头条超大规模 HDFS 降负载
作者简介 王振华,趣头条大数据总监,趣头条大数据负责人. 王海胜,趣头条大数据工程师,10 年互联网工作经验,曾在 eBay.唯品会等公司从事大数据开发相关工作,有丰富的大数据落地经验. 高昌健,Ju ...
- eureka服务端和客户端的简单搭建
本篇博客简单记录一下,eureka 服务端和 客户端的简单搭建. 目标: 1.完成单机 eureka server 和 eureka client 的搭建. 2.完成eureka server 的添加 ...
- 21.6.17 test
\(NOI\) 模拟赛. \(T1\) 正解树形DP,由于不是很熟悉概率和期望所以打了个20pts暴力,说不定见多了概率能打出60pts半正解?最后的虚树更不会. \(T2\) 又是概率,还有坐标数量 ...
- gas-station leetcode C++
There are N gas stations along a circular route, where the amount of gas at station i isgas[i]. You ...