Codeforces Round #332 (Div. 2)D. Spongebob and Squares(数学方程,暴力)

13 篇文章 0 订阅

题目链接
题意:给你一个数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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值