HDU3113(数学题)

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=3113

题意:

求x最小的一对二元组(x,y)满足 x^3 + y^3 =n;

分析:

x^3 + y^3 = n  ====>(x + y) * (x^2 -x * y + y^2) = n;// x+y, x^2 -x * y + y^2 都是n的约数

因此我们可以枚举n的因子;

令 x + y = a  ------------1)

x^2 -x * y + y^2 = b ------------2)

a * b = n -----------3)

1,2,3) 联立可以得到 x1 = (3 * a + sqrt(12 * b - 3 *a * a) )/6 , x2 = (3 * a - sqrt(12 * b - 3 *a * a) )/6,

在解的过程中我们需要判断 以下两点

1)12 * b - 3 *a * a 是不是完全平方数

2)x1,x2,是不是整数解

代码如下:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;

int n,cnt;

int a[500];

void init()//筛选出n的约数
{
    cnt=0;
    for(int i=1;i*i<=n;i++){
        if(n%i==0){
            if(i*i!=n){
                a[cnt++]=i;
                a[cnt++]=n/i;
            }
            else
                a[cnt++]=i;
        }
    }
}

int main()
{
    while(~scanf("%d",&n)){
        if(n==0) break;
        init();
        int ansx=100000000,ansy=10000000,cn=0;
        for(int i = 0;i<cnt;i++){//枚举因子
            int tmpa=a[i],tmpb=n/a[i];
            int tt=(int) sqrt(12*tmpb-3*tmpa*tmpa*1.0);
            if(tt*tt!=12*tmpb-3*tmpa*tmpa) continue;
            if((3*tmpa+tt)%6==0){
                cn++;
                if(ansx>(3*tmpa+tt)/6){
                    ansx=(3*tmpa+tt)/6;
                    ansy=tmpa-ansx;
                }
            }
            if((3*tmpa-tt)%6==0){
                cn++;
                if(ansx>(3*tmpa-tt)/6){
                    ansx=(3*tmpa-tt)/6;
                    ansy=tmpa-ansx;
                }
            }
        }
        if(cn)
            printf("%d %d\n",ansx,ansy);
        else
            puts("Impossible");
    }
    return 0;
}
时间: 2024-08-25 12:17:32

HDU3113(数学题)的相关文章

HDU5344——数学题——MZL&#39;s xor

MZL loves xor very much.Now he gets an array A.The length of A is n.He wants to know the xor of all (Ai+Aj)(1≤i,j≤n)The xor of an array B is defined as B1 xor B2...xor Bn Input Multiple test cases, the first line contains an integer T(no more than 20

【算法编程】小学数学题难倒博士

昨天在科学网上得知这样一个新闻<越南小学数学题难倒博士>,据悉题目来自越南保禄小学三年班,不过报道称该题难倒了上至博士下至家长,未免也太言过其实了. 题目描述 学生需要在下图表格中按由上至下.从左到右的顺序,填入1~9的数字,可重复填写,并按先乘除后加减(图中冒号代表除法)的运算法则,完成整条算式. 解题方法 显然,这题对于我们这种程序员来说完全不是问题,只要在大一上过C语言的学生(我们学校全校都学过C,即使是文科专业)基本上都可以用九重for循环来穷举解出此题,下面我分别用C和Matlab实

hdu 4974 A simple water problem(数学题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4974 Problem Description Dragon is watching competitions on TV. Every competition is held between two competitors, and surely Dragon's favorite. After each competition he will give a score of either 0 or

一道有趣的数学题

班主任给了我一道数学题: 求证an都能表示成两个自然数的平方和. [分析] 不会就打表(OI后遗症) 那么我们发现an的第2个平方在an+1出现在了第一个(按从小到大) 这个就很py了啊,再看看第二个有啥关系..咦好像是比两倍多一点,多多少呢?咦,1.3.7.17--这不就是我找的那个规律了吗 啊我们就能猜想: 然后我们归纳一波 对于n<=5显然成立(上表),对于n>=6: 假设对于n=i成立,那么就有 目标:证明下式成立 这是啥呢?令A'=B,B'=A+2B,代入即可. 剩下的故事啊就是把递

一道很有意思的数学题

题目:某个家庭中有2个小孩,已知其中一个是女孩,则另一个是女孩的概率是多少? 答案:1/3 今天上概率课,想起了高中的这一道数学题.当初在高中对这个答案真的是百思不得其解,始终认为是1/2.生男生女和另一个孩子的性别有什么必然的联系吗?最后迫于升学的压力,不能任性啊~!!!只得背过答案,碰到前后性别不一样,就是2/3,一样就是1/3. 今天想起来,在百度上的找了好多关于这个问题理解,虽然有说1/3的,有说1/2的,但是仔细观察后发现,其实关于各种答案的问题描述还是有细微的差别的.最后在这里: 一

python笔记1-用python解决小学生数学题

前几天有人在群里给小编出了个数学题: 假设你有无限数量的邮票,面值分别为6角,7角,8角,请问你最大的不可支付邮资是多少元? 小编掰着手指头和脚趾头算了下,答案是:1.7元 那么问题来了?为啥是1.7呢,于是小编用python解决了这个小学数学题. 一.排列组合 假设6.7.8角各有50张(50张够了),先计算出所有的可能组合 二.排序.去重 先对组合就行排序,从小到大的顺序,排队站好,这里用到sort()函数(要是你用冒泡排序,那你就out啦!) sort函数只是对list序列排序,并没有返回

geometry(简单数学题)

geometry Accepts: 324 Submissions: 622 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Description There is a point PP at coordinate (x,y)(x,y). A line goes through the point, and intersects with the postive p

【整理】最近做的几道数学题

数学题也是有意思 那么总结一下 T1.[Bzoj2751][HAOI2012]容易题 题意 有一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于一些限制即A[i]不能取哪些值,我们定义一个数列的积为该数列所有元素的乘积,求出所有可能的数列的积的和. 题解 考虑一个式子(...)(...)(...),()内为一些数相加,根据乘法分配律,打开这个式子就是每次从每个括号中选一个元素,再把所有可能选择的结果加起来. 这件事情就是我们题目的设问,于是我们只要算出来每个位置sigma可能的选择

hdu 4956 Poor Hanamichi BestCoder Round #5(数学题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4956 Poor Hanamichi Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7    Accepted Submission(s): 4 Problem Description Hanamichi is taking part in