<p> 传送带 :http://www.bnuoj.com/v3/problem_show.php?pid=49477</p><p>由于数据小,可以知道最多只能为7个,使用前缀和(线段树太复杂。。。)</p><p>f[]记录其质约数个数,num[i][j]记录i之前j个的个数</p>#include<cstdio>
#include<cmath>
using namespace std;
const int Max=1000005;
int f[Max],num[Max][8];
int main()
{
int t,l,r;
for(int i=2;i<Max;i++){//预处理
if(f[i]==0)
for(int j=i;j<Max;j+=i){
f[j]++;
}
}
for(int i=2;i<Max;i++){
for(int j=1;j<8;j++){
num[i][j]+=num[i-1][j];
}
num[i][f[i]]++;
}
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&l,&r);
int tt[8];
int ans=1;
for(int i=1;i<8;i++)
{
tt[i]=num[r][i]-num[l-1][i];
}
if(tt[2]>1||(tt[2]+tt[6])>1) ans=2;
if(tt[3]>1||(tt[3]+tt[6]>1)) ans=3;
if(tt[4]>1) ans=4;
if(tt[5]>1) ans=5;
if(tt[6]>1) ans=6;
if(tt[7]>1) ans=7;
printf("%d\n",ans);
}
return 0;
}
2015 Multi-University Training Contest 3 RGCDQ
最新推荐文章于 2020-08-15 08:27:08 发布