难度3
其实是有点虚高的,可能是我这种数学题做的少了。在考试时式子都写出来了,但不知道怎么处理。然后注意一下细节就可以了。懒懒懒。对于xy=k(k为常数)可以直接枚举k的因子,然后看一下限制条件即可。
#include<bits/stdc++.h>
using namespace std;
long long T,n,x,tot=0;
unordered_map <long long,long long> mp;
int main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>T;
while(T--){
mp.clear();
tot=0;
cin>>n>>x;
long long g1=n-x,g2=n+x-2;
for(long long k=1;k*k<=g1;k++){
if(g1%k==0){
if(k%2==0&&(k+2)/2>=x&&mp[(k+2)/2]==0){
mp[(k+2)/2]=1;
tot++;
//cout<<(k+2)/2<<endl;
}if((g1/k)%2==0&&(g1/k+2)/2>=x&&mp[(g1/k+2)/2]==0){
mp[(g1/k+2)/2]=1;
tot++;//cout<<(g1/k+2)/2<<endl;
}
}
}
for(long long k=1;k*k<=g2;k++){
if(g2%k==0){
if(k%2==0&&mp[(k+2)/2]==0&&(k+2)/2>=x){
tot++;//cout<<(k+2)/2<<endl;
}if((g2/k)%2==0&&mp[(g2/k+2)/2]==0&&(g2/k+2)/2>=x){
tot++;//cout<<(g2/k+2)/2<<endl;
}
}
}
cout<<tot<<"\n";
}
return 0;
}
/*
1
5 1
*/
标签:cout,思想,++,long,CF1928C,数学,tot,g1,mp
From: https://www.cnblogs.com/wuhupai/p/18036246