liangbch 发表于 2012-3-2 10:53:25

一道数论题

我们知道如下等式
3^2-2^3=1
3^3-5^2=2
2^8-5^3=3
现在,我提出一个2问题,不知能否解决。

1.对于一个给定的小的正整数c,满足不定方程$a^m-b^n=c$且a>1,b>1,m>1,n>1,的整数解(a,b,m,n)是有限的。
2.如果能够证明1,可否有出求方程1的解的通过算法。


注:
1. 或许(1)中的方程不能叫做不定方程,因为其指数也是未知数。
2. 对于c=1,在a和b的素因子不超过某个数的情况下,其解是有限的,它是Stormer's theorem的一个特例,见http://en.wikipedia.org/wiki/St%C3%B8rmer%27s_theorem

liangbch 发表于 2012-3-2 14:46:18

这种数确实很少。

    我扫描了$2^50$以内的乘方数(若 $n=i ^ e$, (i,e是整数,且i>1,e>1)则称n是乘方数),检查相邻2个数之间的差,若<=16,则输出。结果为

c=
      9-8=1   9=3^2   8=2^3

c=
      27-25=2 27=3^325=5^2

c=
      128-125=3       128=2^7 125=5^3

c=
      8-4=4   8=2^3   4=2^2
      36-32=4 36=6^232=2^5
      125-121=4       125=5^3 121=11^2

c=
      32-27=5 32=2^527=3^3

c=
      16-9=716=2^49=3^2
      32768-32761=7   32768=2^15      32761=181^2

c=
      97344-97336=8   97344=312^2   97336=46^3


c=
      25-16=9 25=5^216=2^4
      225-216=9       225=15^2      216=6^3
      64009-64000=9   64009=253^2   64000=40^3


c=
      2197-2187=10    2197=13^3       2187=3^7


c=
      3136-3125=11    3136=56^2       3125=5^5
      3375-3364=11    3375=15^3       3364=58^2


c=
      2209-2197=12    2209=47^2       2197=13^3


c=
      49-36=13      49=7^236=6^2
      256-243=13      256=2^8 243=3^5
      4913-4900=13    4913=17^3       4900=70^2


c=
      64-49=15      64=2^649=7^2
      1295044-1295029=15      1295044=1138^21295029=109^3


c=
      144-128=16      144=12^2      128=2^7

数学星空 发表于 2012-3-2 23:09:42

对于比较小的c值,通常取m/n~~ln(b)/ln(a)
可以用连分数来逼近m/n的值,这样更容易搜到解

liangbch 发表于 2012-3-3 13:36:22

有道理

liangbch 发表于 2012-3-5 18:14:05

给出求渐进连分数的代码,方便自己和别人参考。#include "stdafx.h"
#include "math.h"

typedef int BASE_INT_TYPE;
typedef __int64 DOUBLE_INT_TYPE;

typedef struct _base_pair
{
        DOUBLE_INT_TYPE p;
        DOUBLE_INT_TYPE q;
}BASE_PAIR;

typedef struct _base_pair_3e
{
        BASE_PAIR d;
}BASE_PAIR_3E;

void continued_frac_serial(double f)
{
        BASE_INT_TYPE a;
        BASE_PAIR_3E pqs;
        double cf,tf;
        int i;
       
        tf=f;
        pqs.d.p=a=(BASE_INT_TYPE)(tf);
        pqs.d.q=1;
        cf=(double)(pqs.d.p)/(double)(pqs.d.q);
        printf("\nf=%.16f\n:%I64d/%I64d=%.16f\n",f,pqs.d.p,pqs.d.q,cf);

        tf -= a;
        tf=1.0/tf;
        for (i=1;1;i++)
        {
                a= (BASE_INT_TYPE)(tf);
                tf -= a;
                tf=1.0/tf;
               
                if (i==1)
                {
                        pqs.d.p = pqs.d.p * a +1;        //p1=a0 * a1+1
                        pqs.d.q = a;                //q1=a1
                        cf=(double)(pqs.d.p)/(double)(pqs.d.q);
                }
                else
                {
                        pqs.d.p= pqs.d.p * a +pqs.d.p;//p= a * p + p;
                        pqs.d.q= pqs.d.q * a +pqs.d.q;//q= a * q + q;
                        cf=(double)(pqs.d.p)/(double)(pqs.d.q);
                }
               
                printf("[%d]:%I64d/%I64d=%.16f\n",i,pqs.d.p,pqs.d.q,cf);
                if ( fabs(cf-f) < f * 2.3e-16)
                {
                        break;
                }
               
                a=a;
                if (i>=2)
                {
                        pqs.d.p=pqs.d.p;
                        pqs.d.q=pqs.d.q;
                        pqs.d.p=pqs.d.p;
                        pqs.d.q=pqs.d.q;
                }
        }
}

void test1()
{
        double f;
        f=3.1415926535897932384626433832795;
        continued_frac_serial(f);       
        f=log(3.0)/log(2.0);         continued_frac_serial(f);
        f=log(5.0)/log(2.0);         continued_frac_serial(f);
}

int _tmain(int argc, _TCHAR* argv[])
{
        test1();
        return 0;
}

manthanein 发表于 2017-1-23 15:37:03

https://en.wikipedia.org/wiki/Catalan%27s_conjecture
这好像是个没有解决的问题
页: [1]
查看完整版本: 一道数论题