其他分享
首页 > 其他分享> > 手机

手机

作者:互联网

DD 想买一个新手机,这个手机的长为 \(x\) ,宽为 \(y\) ,大小等于 \(n(x*y=n)\) ,她喜欢用正方形的袋子装手机,所以她希望最小化这个手机长边的长度\((\max(x,y))\),请问在长边最小的情况下这个手机的长宽分别是多少?

输入格式
一个整数表示 \(n\)

输出格式
输出这个手机的长\((\max(x,y))\),宽\((\min(x,y))\)

数据范围
对于 \(30\%\) 的数据,\(1 \leq n \leq 100\)

对于 \(60\%\) 的数据,\(1 \leq n \leq 10000\)

对于 100% 的数据,\(1 \leq n \leq 10^{12}\)
输出时每行末尾的多余空格,不影响答案正确性

样例输入

6

样例输出

3 2

其实就是求因数,要求大的那个因数尽量小。考虑枚举所有因数,然后找一个最大值。因数成对出现,我们知道一个就知道另一个。所以\(O(\sqrt(n))\)枚举即可。

#include <bits/stdc++.h>
using namespace std;
long long n;
long long x,y;
int main()
{
//    freopen("mobile.in", "r", stdin);
//    freopen("mobile.out", "w", stdout);
    cin>>n;
    for(int i=1;i<=min(n,1000000LL);i++)
    {
        if(i>n/i)
            break;
        if(n%i==0)
        {
            x=i,y=n/i;
        }
    }
    cout<<y<<' '<<x<<endl;
    return 0;
}

标签:输出,长边,long,leq,因数,手机
来源: https://www.cnblogs.com/mekoszc/p/16271568.html