题目链接
题意:给你一个数X问,n*m的矩形中,面积不同的正方形的个数和是X。输出所有的 n * m
解法:
然后继续化简是6*x+n^3-n=(3 * n^2+3 * n) * m是关于m的函数,我们直接枚举n,就好了,注意上限,
#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define pb push_back
#define X first
#define Y second
#define cl(a,b) memset(a,b,sizeof(a))
typedef pair<long long ,long long > P;
const int maxn=100005;
const LL inf=1LL<<45;
const LL mod=1e9+7;
vector<P> ans;
int main(){
LL x;scanf("%lld",&x);
ans.pb(P(1,x/1));
bool same=false;
if(1==x/1)same=true;
for(LL n=2;n<=10000000||n*n*n<=x;n++){
LL a=6*x+n*n*n-n;
LL b=3*n*n+3*n;
if(a%b==0){
if(n==a/b)same=true;
if(n<=a/b)ans.pb(P(n,a/b));
}
}
int N=2*ans.size();
if(same)N-=1;
printf("%d\n",N);
for(int i=0;i<ans.size();i++){
printf("%lld %lld\n",ans[i].X,ans[i].Y);
}
for(int i=ans.size()-1;i>=0;i--){
if(ans[i].X!=ans[i].Y)printf("%lld %lld\n",ans[i].Y,ans[i].X);
}
return 0;
}