关于春季测试
  • 板块灌水区
  • 楼主PurslaneM2GA
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/3/4 22:45
  • 上次更新2023/10/23 23:02:33
查看原帖
关于春季测试
120947
PurslaneM2GA楼主2023/3/4 22:45

我省没有举办 , 所以不是很急 , 但是希望有人帮助 .

T2

#include<bits/stdc++.h>
#define int __int128
#define ffor(i,a,b) for(int i=(a);i<=(b);i++)
#define roff(i,a,b) for(int i=(a);i>=(b);i--)
using namespace std;
int read(void) {
	int s=0,f=0; char ch=getchar();
	while(!(ch>='0'&&ch<='9')) f=(ch=='-'),ch=getchar();
	while(ch>='0'&&ch<='9') s=(s<<1)+(s<<3)+(ch^48),ch=getchar();
	return f?-s:s;
}
void write(int x) {
	if(x<0) putchar('-'),x=-x;
	if(x>=10) write(x/10);
	return putchar(x%10+'0'),void();
}
int qpow(int base,int p) {
	int ans=1;
	while(p) {
		if(p&1) ans*=base;
		base*=base,p>>=1;	
	}
	return ans;
}
int super_sqrt(int v,int n) { //将 v 开 n 次根 
	if(n==1) return v;
	int r=qpow(2,(60/n)+1),l=1,ans=0;
	while(l<=r) {
		int mid=l+r>>1;
		if(qpow(mid,n)<=v) ans=mid,l=mid+1;
		else r=mid-1;	
	}
	return ans;
}
int f[1000];
signed main() {
	int n=read(),k=read();
	f[k]=1;
	ffor(i,k+1,60) {
		f[i]=1;	
		ffor(j,1,i-1) if(i%j==0) f[i]-=f[j];
    }
	int ans=0;
	ffor(i,k,60) ans+=f[i]*(super_sqrt(n,i)-1);
	write(ans+1);
	return 0;
}

能否解释一下 , 不开 O2 能 A , 开了 O2 不能 A 是什么原因 ?

2023/3/4 22:45
加载中...