春测T2求调
  • 板块灌水区
  • 楼主ColinKIA
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/3/5 15:38
  • 上次更新2023/10/23 22:58:00
查看原帖
春测T2求调
647306
ColinKIA楼主2023/3/5 15:38

春测T295分

#include <bits/stdc++.h>
#define int __int128
using namespace std;
map<int,bool> mp;
int n,k,ans;
template<typename T_>
void read(T_ &x) {
	x = 0;
	char s = getchar();
	bool f = false;
	while (s < '0' || '9' < s) { f = s == '-', s = getchar(); }
	while ('0' <= s && s <= '9') { x = (x << 3) + (x << 1) + (s - '0'), s = getchar(); }
	if (f) x = -x;
}
template<typename T_>
void write(T_ x) {
	if (x < 0) putchar('-'), x = -x;
	if (9 < x) write(x / 10);
	putchar(x % 10 + '0');
}
int qpow(int a,int b){
    int res=1;
    while(b){
        if(b&1)
            res=res*a;
        a=a*a;
        b>>=1;
    }
    return res;
}
int sqrt(int a){
	int l=0,r=a,kkk;
	while(l<=r){
		int mid=(l+r)/2;
		if(mid*mid>a) r=mid-1;
		else{
			l=mid+1;
			kkk=mid;
		}
	}
	return kkk;
}
signed main(){
    read(n),read(k);
    int kk=k;
    while(k<=63&&qpow(2,k)<=n){
        if(k==1){
            ans+=n;
            k++;
            break;
        }
        if(k==2){
        	ans+=(int)(sqrt(n));
        	k++;
        	continue;
        }
        int nn=1;
        while(qpow(nn,k)<=n){
        	int mm=qpow(nn,k);
            if(!mp[mm]&&(mm!=(int)(sqrt(mm))*(int)(sqrt(mm))||kk>2)){
                ans++;
                mp[mm]=1;
            }
            nn++;
        }
        k++;
    }
    write(ans);
    return 0;
}
2023/3/5 15:38
加载中...