#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
long long n;
int r;
vector<int> tmpTable;
vector<int> table;
long long cal(long long x, long long power) {
return pow(double(x+0.5), 1.0/power)-1;
}
void init() {
table.clear();
for(int i=0; i<(int)tmpTable.size() && -tmpTable[i]<=r; i++) {
int a=tmpTable[i];
int tmp=table.size();
for(int j=0; j<tmp; j++) {
int b=table[j];
if(abs(a*b)<=63) table.push_back(a*b);
}
table.push_back(a);
}
}
long long func(long long x) {
if(x==1) return 0;
long long res=x;
for(int power : table) {
long long tmp=pow(double(x+0.5), 1.0/abs(power))-1;
if(power<0) res-=tmp;
else res+=tmp;
}
return res-1;
}
int main() {
vector<int> vis(63, 0);
for(int i=2; i<63; i++) {
if(vis[i]!=0) continue;
tmpTable.push_back(-i);
for(int j=i+i; j<63; j+=i) {
vis[j]=1;
}
}
int T;
scanf("%d", &T);
while(T--) {
scanf("%I64d%d", &n, &r);
init();
long long ans=n, tmp=-1;
while(tmp!=n) {
tmp=func(ans);
ans+=n-tmp;
}
printf("%I64d\n", ans);
}
return 0;
}
tjut 5297
最新推荐文章于 2019-01-27 21:10:00 发布