【THUSC2017】杜老师
题目描述
杜老师可是要打+∞年World Final的男人,虽然规则不允许,但是可以改啊!
但是今年WF跟THUSC的时间这么近,所以他造了一个idea就扔下不管了……
给定L,R,求从L到R的这R−L+1个数中能选出多少个不同的子集,满足子集中所有的数的乘积是一个完全平方数。特别地,空集也算一种选法,定义其乘积为1。
由于杜老师忙于跟陈老师和鏼老师一起打ACM竞赛,所以,你能帮帮杜老师写写标算吗?
输入格式
从标准输入读入数据。
每个测试点包含多组测试数据。
输入第一行包含一个正整数 T(1≤T≤100),表示测试数据组数。
接下来T行,第i+1行两个正整数Li,Ri表示第 i 组测试数据的 L,R ,保证1≤Li≤Ri≤107。
输出格式
输出到标准输出。
输出T行,每行一个非负整数,表示一共可以选出多少个满足条件的子集,答案对998244353取模。
$R_{i} \le 1e7$ , $T \le 100$ , $\sum_{i=1}^{T}(R_{i}-L{i}+1) \le 6e7$
题解
- 唯一分解,把每个质数看成一个元,$mod2$意义下高斯消元设自由元个数为$d$
- 答案就是线性相关的子集数$=2^d$;
- 暴力$50$
- 在$L,R$比较大的时候,直接消元会很浪费,考虑剪枝;
- 如果$[L,R]$中出现了质因子$p$;
- 一 ,若 $p > \sqrt R$则$p$对应位一定有基; -> $p^k>R \ (k>1)$
- 二 ,若$ p <= \lfloor \frac{R}{L} \rfloor $ 则$p$对应位一定有基;-> $( B(L) xor B(L*p) == B(p) )$,说明$p$独立
- 三, 若$R-L>=6e3$,则$p$对应位一定有基; -> ???? 如果有人知道为什么的话求教
- 大于根号的因子只有一个,特判一的;
- 所以近距离暴力高斯消元,远距离直接计算;
- $trick$ :线筛每个数的因子可$logR$分解因数 ,$bitset$优化,同时线性基满了就不再插入;
- $O(R \ + \ \sum R_{i}-L_{i} \ + \ T*(\frac{R}{64} + 6e3*log \ R) )$
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=,M=1e7+,mod=;
int T,L[],R[],n,k,size,pos[N];
int pt,pr[M],vis[M],v[M],visT[M];
typedef bitset<> BIT;
BIT B[],now,pre;
struct data{
int x,y;
bool operator <(const data&A)const{
return y < A.y;
}
}A[N];
int pw2(int y){
int re=,x=;
for(int i=y;i;i>>=,x=(ll)x*x%mod){
if(i&)re=(ll)re*x%mod;
}
return re;
}
void get_fac(int x,BIT&y){
y.reset();
if(v[x]>k)x/=v[x];
while(x!=){
int t=v[x],cnt=;
while(x%t==&&(x/=t))cnt++;
if(cnt&)y[pos[t]]=;
}
}
bool ins(BIT&x){
for(int i=;i<size;i++)if(x[i]){
if(B[i][i])x^=B[i];
else return B[i]=x,true;
}
return false;
}
void solve1(int l,int r){
int tot=,cnt=,tot2=;
for(int i=l;i<=r;i++)A[++cnt]=(data){i,v[i]};
sort(A+,A+cnt+);
for(int i=;i<size;i++)B[i].reset();
for(int i=;i<=cnt;i++){
get_fac(A[i].x,now);
if(A[i].y<=k){if(tot<size)tot+=ins(now);}
else if(A[i].y!=A[i-].y){tot2++;pre=now;}
else {now^=pre;if(tot<size)tot+=ins(now);}
}
// printf("%d %d\n",tot,tot2);
printf("%d\n",pw2(r-l+-tot-tot2));
}
void solve2(int l,int r){
int tot=;
for(int i=l;i<=r;i++)if(v[i]>k&&visT[v[i]]!=T){
visT[v[i]]=T;
tot++;
}
for(int i=;i<=size;i++)if((l-)/pr[i]<r/pr[i]&&visT[pr[i]]!=T){
visT[pr[i]]=T;
tot++;
}
printf("%d\n",pw2(r-l+-tot));
}
int main(){
freopen("T2.in","r",stdin);
freopen("T2.out","w",stdout);
scanf("%d",&T);
for(int i=;i<=T;i++)scanf("%d%d",&L[i],&R[i]),n=max(n,R[i]);
k=sqrt(n); v[]=;
for(int i=;i<=n;i++){
if(!vis[i]){
v[pr[++pt]=i]=i;
if(i<=k)size++,pos[i]=pt-;
}
for(int j=;j<=pt&&i*pr[j]<=n;j++){
vis[i*pr[j]]=;
v[i*pr[j]]=v[i];
if(i%pr[j]==)break;
}
}
for(int i=;T;i++,T--){
if(R[i]-L[i]>=)solve2(L[i],R[i]);
else solve1(L[i],R[i]);
}
return ;
}THUSC2017D1T2
【THUSC2017】杜老师的更多相关文章
- [THUSC2017]杜老师:bitset+线性基
算法一(50pts) 分析 有一个很显然的暴力做法,对于区间内的每个数开个bitset,然后暴力分解质因数.如果对于一个数,它的一个质因子的指数是奇数,那么就把bitset的对应位设成\(1\).答案 ...
- 【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巨巨 如果一个数是完全平方数,那么它的所有质因子个数都是偶数 我们把每一个数分别维护它的每一个质因子的奇偶性,那么就是要我们选出若干个数使得所有质因子的个数为偶数.如果用线 ...
- LOJ 2978 「THUSCH 2017」杜老师——bitset+线性基+结论
题目:https://loj.ac/problem/2978 题解:https://www.cnblogs.com/Paul-Guderian/p/10248782.html 第 i 个数的 bits ...
- [loj2978]杜老师
假设所有素数从小到大依次为$p_{1},p_{2},...,p_{k}$,我们将$x$转换为一个$k$位的二进制数,其中从低到高第$i$位为1当且仅当其$p_{i}$的幂次为奇数 不难发现以下两个性质 ...
- 洛谷 P7451 - [THUSCH2017] 杜老师(线性基+根分+结论题)
题面传送门 看到乘积为平方数我们可以很自然地想到这道题,具体来说,我们对 \(1\sim 10^7\) 中所有质因子标号 \(1,2,\cdots,\pi(10^7)\),对于 \(x\in[l,r] ...
随机推荐
- 利用saltstack一键部署多台zookeeper
以上是saltstack上面sls文件存放zookeeper的路径和文件 以上是入口文件把文件夹做成包 重要安装配置在zoo.sls,以下是该sls的内容 zookeeper: file.manage ...
- 高可用OpenStack(Queen版)集群-6.Nova控制节点集群
参考文档: Install-guide:https://docs.openstack.org/install-guide/ OpenStack High Availability Guide:http ...
- 基于C#的机器学习--目录
转载请注明出处:https://www.cnblogs.com/wangzhenyao1994/p/10223666.html 文章发表的另一个地址:https://blog.csdn.net/wyz ...
- Beta周王者荣耀交流协会第五次Scrum会议
1. 立会照片 成员王超,高远博,冉华,王磊,王玉玲,任思佳,袁玥全部到齐. master:王磊 2. 时间跨度 2017年11月14日 19:00 — 19:50 ,总计50分钟. 3. 地点 一食 ...
- Daily Scrum (2015/10/28)
昨天DEV们完成了一部分代码风格的修整.今晚在与其他组进行交流时我们发现我们的代码是需要在服务器上运行的,而且服务器是需要配置的,而且据说需要花一些时间.所以在编写代码之前PM提出我们应该先把服务器搭 ...
- [BUAA_SE_2017]结对项目-数独程序扩展
结对项目-数独程序扩展 Runnable on x64 Only sudoku17.txt 须放置在可执行文件同目录中,可移步以下链接进行下载 Core-Github项目地址 GUI-Github项目 ...
- 【数据预处理】TIMIT语料库WAV文件转换
1 问题描述 这两天复现代码.先构造数据集,纯净语音.不同噪声.不同SNR的混合语音.其中纯净语音由两部分组成,IEEE corpus和TIMIT. 一开始我用MATLAB中的audioread读取音 ...
- 【Coursera】基于朴素贝叶斯的中文多分类器
一.算法说明 为了便于计算类条件概率\(P(x|c)\),朴素贝叶斯算法作了一个关键的假设:对已知类别,假设所有属性相互独立. 当使用训练完的特征向量对新样本进行测试时,由于概率是多个很小的相乘所得, ...
- Beta冲刺(5/7)
队名:天机组 组员1友林 228(组长) 今日完成:修改代码 明天计划:封装代码 剩余任务:优化网络通讯机制 主要困难:暂无 收获及疑问:暂无 组员2方宜 225 今日完成:优化了ui界面 明天计划: ...
- Scrum Meeting Beta - 10
Scrum Meeting Beta - 10 NewTeam 2017/12/11 地点:新主楼F座二楼 任务反馈 团队成员 完成任务 计划任务 安万贺 完成了作业详情的本地存储Issue #165 ...