求调
  • 板块CF955C Sad powers
  • 楼主expnoi
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/3/17 08:14
  • 上次更新2023/10/23 21:21:55
查看原帖
求调
378346
expnoi楼主2023/3/17 08:14
#include<bits/stdc++.h>
#define int long long
#define DEBUG puts("fangzichangakioi");
using namespace std;
inline int read()
{
	int s=0,w=1;
	char c=getchar();
	while(c<'0'||c>'9')
	{
		if(c=='-')w=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9')s=(s<<3)+(s<<1)+(c^48),c=getchar();
	return s*w;
}
inline void print(int x)
{
	if(x<0)x=-x,putchar('-');
	if(x>=10)print(x/10);
	putchar(x%10+48);
}
int q,l,r,f[110],lim;
inline int qpow(int a,int b,int x)
{
	int res=1;
	while(b)
	{
		if(b&1){
			res*=a;
			if(res>x)return x+1;
		}
		a*=a;
		b>>=1;
		if(b&&a>x)return x+1;
	}
	return res;
}
inline int Sqrt(int x,int y)//a^y<=x
{
	int l=1,r=x,res=0;
	while(l<=r)
	{
		int mid=l+r>>1;
		if(qpow(mid,y,x)<=x)
		{
			res=mid;
			l=mid+1;
		}
		else r=mid-1;
	}
	return res;
}
inline int query(int x)
{
	int ans=0;
	memset(f,0,sizeof(f));
	for(int a=2;a<60;a++)//a是指数 
	{
		if(f[a]==1)continue;
		if(qpow(2,a,x)>x)break;
		int cnt=Sqrt(x,a);
		ans+=(1ll-f[a])*cnt;
		for(int j=a*2;j<60;j+=a)
		{
			f[j]+=(1ll-f[a]);
		}
	}
	return ans;
}
signed main()
{
	q=read();
	while(q--)
	{
		l=read();
		r=read();
		int ans=query(r)-query(l-1);
		print(ans);
		puts("");
	}
}
2023/3/17 08:14
加载中...