【一个数学问题】丢番图倒数

[复制链接]
2397|12
 楼主| keer_zu 发表于 2014-10-17 11:42 | 显示全部楼层 |阅读模式
本帖最后由 keer_zu 于 2014-10-17 11:46 编辑

来源:问题108

以下方程中,x,y,n为正整数。

1/x + 1/y = 1/n
对于n=4,有三个解,分别为:

1/5 + 1/20 = 1/4
1/6 + 1/12 = 1/4
1/8 + 1/8  = 1/4
求最小的n,使得其解个数大于1000.


 楼主| keer_zu 发表于 2014-10-17 11:44 | 显示全部楼层
本帖最后由 keer_zu 于 2014-10-17 16:51 编辑

我算的结果:
num:1071   NO.: 240240

也就是240240,有1071个解。

不知道对不对。

又算了一下是这个:
num:1013   NO.: 180180
180180           1013个
 楼主| keer_zu 发表于 2014-10-17 11:46 | 显示全部楼层
我的计算:

#include <stdio.h>


int IsResult(unsigned long xin,unsigned long nin)
{

        double res,den,num;

       
        den = (double)(xin - nin);
        num = (double)(xin * nin);

        res = num/den;

        if(res - (int)res < 0.00000001)
                return 0;
        else
                return -1;
}

unsigned int GetResultNum(unsigned long nin)
{
        unsigned int resault_num;
        unsigned long xin;

        resault_num = 0;

        for(xin=nin + 1;xin <= nin * 2;xin ++){
                if(IsResult(xin,nin) == 0)
                        resault_num += 1;
        }

        return resault_num;
}




int main(void)
{
        unsigned int num;
        unsigned long i;


        for(i = 4;i < 0xfffffffe;i ++){
                num = GetResultNum(i);
                if(num >= 1000){
                        printf("num:%d   NO.: %ld\n",num,i);
                        return 0;
                }
        }

        printf("unsigned long yichu!\n");

        return 0;
}
 楼主| keer_zu 发表于 2014-10-17 14:01 | 显示全部楼层
#include <stdio.h>


int IsResult(unsigned long xin,unsigned long nin)
{

        double res,den,num;

       
        den = (double)(xin - nin);
        num = (double)(xin * nin);

        res = num/den;

        if(res - (long)res < 0.00000001)
                return 0;
        else
                return -1;
}


int GetResult(unsigned long xin,unsigned long nin,unsigned long *y)
{

        double res,den,num;

       
        den = (double)(xin - nin);
        num = (double)(xin * nin);

        res = num/den;

        if(res - (unsigned long)res < 0.00000001){
                *y = (unsigned long)res;
                return 0;
        }else
                return -1;
}



unsigned int GetResultNum(unsigned long nin)
{
        unsigned int resault_num;
        unsigned long xin;

        resault_num = 0;

        for(xin=nin + 1;xin <= nin * 2;xin ++){
                if(IsResult(xin,nin) == 0)
                        resault_num += 1;
        }

        return resault_num;
}

int ViewResult(unsigned long nin)
{
        unsigned int resault_num;
        unsigned long xin;
        unsigned long y;

        resault_num = 0;

        for(xin=nin + 1;xin <= nin * 2;xin ++){
                if(GetResult(xin,nin,&y) == 0){
                        printf(" (%ld,%ld)",xin,y);
                }
        }

        printf("\n\n");

        return 0;
}




int main(void)
{
        unsigned int num;
        unsigned long i;


        for(i = 4;i < 0xfffffffe;i ++){
                num = GetResultNum(i);
                if(num >= 1000){
                        printf("num:%d   NO.: %ld\n",num,i);

                        ViewResult(i);
                       
                        return 0;
                }
        }

        printf("unsigned long yichu!\n");

        return 0;
}
mylsf 发表于 2014-10-17 16:15 | 显示全部楼层
我得到1094在240240的时候
mylsf 发表于 2014-10-17 16:17 | 显示全部楼层
最起码少了(480480,480480)
mylsf 发表于 2014-10-17 16:19 | 显示全部楼层
361515
361920
362208
362544
362934
363440
364455
365040
366080
366366
366960
367290
367640
368368
368940
369600
370032
370370
371280
372372
372736
374088
374640
375440
375760
377520
378224
378840
379632
379665
380380
381360
381810
382200
382536
383383
383565
384384
385440
385840
388080
388465
388960
389298
390000
390390
391248
391664
  392340
  392700
  393120
  394394
  395120
  395472
  396396
  397040
  397540
  398640
  400400
  401940
  402480
  402864
  403312
  403832
  404040
  404976
  405405
  405860
  407550
  408408
  409640
  410592
  411840
  412720
  414480
  414960
  415415
  416416
  416640
  417648
  417690
  418110
  418704
  420420
  422422
  423280
  423696
  424281
  425040
  426140
  427440
  428400
  429000
  429520
  429968
  430815
  431340
  432432
  433840
  434280
  434928
  435435
  438438
  438984
  440440
  441584
  441840
  443040
  443520
  444080
  444730
  446160
  447216
  447265
  448448
  449904
  450450
  451440
  453180
  453684
  455840
  456560
  457072
  458040
  458640
  460460
  462000
  463320
  464464
  465465
  466752
  467376
  469040
  469560
  471471
  472560
  474474
  475440
  476190
  476840
  477400
  478192
  480480

这些都是符合要求的X值,Y值得自己算
 楼主| keer_zu 发表于 2014-10-17 16:52 | 显示全部楼层
mylsf 发表于 2014-10-17 16:17
最起码少了(480480,480480)

我后边算的是:
num:1013   NO.: 180180
mylsf 发表于 2014-10-18 08:09 | 显示全部楼层
本帖最后由 mylsf 于 2014-10-18 08:29 编辑

240240我的有错误

180180得到的一样
mylsf 发表于 2014-10-18 09:14 | 显示全部楼层
本帖最后由 mylsf 于 2014-10-18 10:11 编辑
keer_zu 发表于 2014-10-17 14:15
哪位验证一下?
ok
 楼主| keer_zu 发表于 2014-10-30 17:48 | 显示全部楼层
 楼主| keer_zu 发表于 2014-11-21 18:20 | 显示全部楼层
mylsf 发表于 2014-10-18 09:14
ok

更多解法在这里面
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:qq群:49734243 Email:zukeqiang@gmail.com

1488

主题

12949

帖子

55

粉丝
快速回复 在线客服 返回列表 返回顶部