蒟蒻春赛t2wa10pts求助
  • 板块学术版
  • 楼主xiezhenhao
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/3/4 20:36
  • 上次更新2023/10/23 23:04:19
查看原帖
蒟蒻春赛t2wa10pts求助
585697
xiezhenhao楼主2023/3/4 20:36

内蒙的蒟蒻求助,考场上暴力的,回来写完自我感觉良好(,感觉这样二分没什么问题。。交到自测里只有十分。。剩余全wa

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll qmi(ll x,int ti)
{
	ll ans=1;
	while(ti>0)
	{
		if(ti&1)
		{
			ans=(ans*x);
		}
		ti>>=1;
		x=(x*x);
	}
	return ans;
}
int k;
ll n;
bool o;
int vis[65];
int main()
{
	scanf("%lld",&n);
	scanf("%d",&k);
	ll ans=0;
	if(k==1)
	{
		printf("%lld",n);
		o=true;
	 } 
	 if(k>=60)
	 {
	 	printf("0");
	 	o=true;
	 }
	 int l=1;
	 int r=60;
	 while(l<r)
	 {
	 	if(o)
	 	{
	 		break;
		}
		int mid=(l+r)/2;
		if(qmi(2,mid)>n)
		{
			r=mid-1;
		 } 
		 else
		 {
		 	l=mid+1;
		 }
	 }
	 int maxn=l;
	 for(int i=k;i<=maxn;i++)
	 {
	 	if(o)
	 	{
	 		break;
		 }
	 	if(vis[i]==1)
	 	{
	 		continue;
		}
		int l=1;
		int r=n/2;
		while(l<r)
		{
			int mid=(l+r)/2;
			if(qmi(mid,i)>n)
			{
				r=mid;
			}
			else
			{
				l=mid+1;
			}
		}
//		printf("%d %d\n",i,l);
		l-=2;

		if(vis[i]==0)
		{
			ans+=l;
			for(int j=i;j<=maxn;j+=i)
			{
				vis[j]++;
			}
		}
		else
		{
			
			ans-=(vis[i]-1)*l;
		}
	 }
	 ans+=1;
	 if(!o)
	 {
	 	printf("%lld",ans);
	 }
	return 0;
 } 
2023/3/4 20:36
加载中...