旅游网站设计asp,国家企业公司网,企业网站建设的背景,阿里云esc建设网站Math
题意#xff1a;
问你有多少对(x,y),1xyn,满足(x2 y2)%(xy1) 0
题解#xff1a;
这种题。。。直接打表芜湖~ 通过打表发现#xff1a;满足情况的为(i,i * i * i),但是也有不和谐的声音出现#xff1a;当x8时#xff0c;会出现两个#xff0c;一个…Math
题意
问你有多少对(x,y),1xyn,满足(x2 y2)%(xy1) 0
题解
这种题。。。直接打表芜湖~ 通过打表发现满足情况的为(i,i * i * i),但是也有不和谐的声音出现当x8时会出现两个一个是(8,30),另一个是(8,512)后者依然满足规律所以前者有问题完美继续找发现27也是不满足的是(27,240),再往下发现有(30,112),再往下看会发现不满足规律的情况其实是很多条链 (8,30)(30,112)112418… (27,240)240… (64,1020)(1020, )… 我们发现这些数很多是相连的而不想连的数彼此之间开头都是i * i * i再通过枚举几个总结规律每个链的开始都是ai * i * i,后面紧跟着是(a * i * i )-pre,pre是上一组 找到规律我们预处理出所有情况然后排序找到每个情况的上限值直接二分就行
代码
#includebits/stdc.h
#define debug(a,b) printf(%s %d\n,a,b);
typedef long double ll;
using namespace std;
//Fe~Jozky
const ll INF0x3f3f3f3f;
inline int read(){int s0,w1;char chgetchar();while(ch0||ch9){if(ch-)w-1;chgetchar();}while(ch0ch9) ss*10ch-0,chgetchar();//s(s3)(s1)(ch^48);return s*w;
}
ll inf1e18;
const int N1e6;
long double a[7000007];
int tot0;
void init(){for(int i2;iN;i){ll x1ll*i*i*i;a[tot]x;ll tx*i*i-i;if(tinf)continue;ll preax;while(tinf){a[tot]t;t1ll*t*i*i-prea;preaa[tot];}}sort(a1,a1tot);
}
int main()
{init();int tread();while(t--){long double x;cinx;int idlower_bound(a1,a1tot,x)-a;if(a[id]x)id--;coutid1endl;}return 0;
}